【问题标题】:Is holding two MySQL connections open simultaneously per PHP application good practice?每个 PHP 应用程序同时打开两个 MySQL 连接是一种好的做法吗?
【发布时间】:2013-10-14 22:32:16
【问题描述】:

我的 PHP 代码允许用户在只读用户中执行任意 SQL 代码。它还需要访问具有写入能力的用户。我的代码在“可写用户”中执行命令,然后使用单独的连接使用“只读用户”查询数据库。然后它再次使用“可写用户”进行查询并退出脚本。

当它执行只读用户的查询时,它使可写用户的连接保持打开状态。据我所知,这是最好的方法,但我的大学担心这在某种程度上是 MySQL 不好的做法,并希望关闭具有写入能力的用户的连接并稍后重新打开它(大概是因为它使与MySQL。) 最好的方法是什么?

whats more efficient and why: one db connection per page or one db connection per function? 说“通常数据库连接的创建成本很高。”

【问题讨论】:

  • 看看连接池。如果您认真考虑扩展您的应用程序,那么连接池是必须的。 stackoverflow.com/questions/18264415/…
  • @Namphibian:虽然您的回答通常是正确的,但它不适用于 PHP,因为脚本结束时所有连接都已关闭。打开持久连接有其自身的问题,只有在打开连接已被确定为性能不佳的相关来源时才应考虑。
  • 感谢 Sven 我不是 PHP 开发人员,所以不确定更详细的信息。

标签: php mysql sql


【解决方案1】:

什么更有效,为什么:每页一个 db 连接或每个函数一个 db 连接?说“通常数据库连接的创建成本很高。”

我会质疑这种说法。对于某些数据库可能是正确的,但不一定对所有数据库都是正确的。众所周知,MySQL 在创建连接时非常轻量级,在使用本地 unix 域套接字时更是如此。

更有趣的是:如果你使用一个要求连接不改变的功能怎么办?就像插入数据集然后选择 LAST_INSERT_ID()?如果您使用只读连接,这将不起作用。

虽然我确实认为使用只读用户帐户有利于安全,但只有当这是脚本中使用的唯一帐户时才有意义。否则,您会以某种方式根据查询类型来决定使用哪种连接 - 如果您会自动使用正确的连接来读取或写入,那么从安全角度来看,使用两个连接是没有意义的。

此外,如果 SELECT 将转到不同的连接,您将无法在事务期间使用 SELECT 语句。

总而言之:使用多个连接来完成一个连接也可以完成的事情似乎是个坏主意——除非你能给出更多的理由。

再次阅读您的问题,我偶然发现了您的特殊原因:您执行任意 SQL 语句。这样,使用受限帐户确实很有意义。打开和关闭等待写入的连接也没有任何意义。这样做的唯一原因是如果数据库服务器达到了他配置的并发连接限制。

【讨论】:

  • 我想在这种情况下我想要单独的脚本,手指一滑,你正在针对可写连接执行任意 sql。
  • 我们正在执行任意 SQL 语句,以使开发人员可以完全访问数据库(所有数据都是公开的)。 @TonyHopkinson,完成命令需要写入权限,是的,我们会小心的。所以你是说有两个并发连接到同一个数据库没有问题吗?我个人对此很好,我的大学只是需要一些保证,因为他从未在任何其他代码中看到过这样的例子。感谢您的帮助。
  • 哦,我见过不少使用两个并发连接的东西,但通常你维护它们的时间要比一个脚本长得多。找出这是否可能是一个问题的唯一方法是进行一些监控,通常有一个限制和一个较低的实际限制,但考虑到简洁,你必须开始获得严重的流量才能开始窒息我应该认为。
【解决方案2】:

只要您可以清楚地跟踪哪个连接是哪个连接,您当前的解决方案就可以证明是好的,甚至具有可以轻松扩展到主从场景的优势。 有话要说,仅在需要时才打开写入连接,但在网络请求的短暂世界中(我假设我们正在谈论),只要你拥有它打开就可以了

如果我们谈论永久运行的守护进程,无论如何,在 N 秒/分钟无活动后关闭连接,无论如何您可能会有不止一个连接,这样您就可以异步运行多个查询。

【讨论】:

    猜你喜欢
    • 2012-09-29
    • 1970-01-01
    • 2017-09-27
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    相关资源
    最近更新 更多