每个PHP应用程序的良好实践是否同时打开两个MySQL连接?

时间:2013-10-14 22:32:16

标签: php mysql sql

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

在执行只读用户的查询时,它会使写入功能用户的连接处于打开状态。据我所知,这是最好的方法,但我的大学关注的是MySQL的不良做法,并希望关闭写入能力的用户的连接,并在以后重新打开它(大概是因为它将并发连接的数量增加了一倍) MySQL。)最好的方法是什么?

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

2 个答案:

答案 0 :(得分:2)

  

更高效和原因:每页一个数据库连接或每个功能一个数据库连接?他说“通常数据库连接的创建成本很高。”

我要挑战那个声明。对于某些数据库来说可能是这样,但对于所有数据库都不一定如此。众所周知,MySQL在创建连接时非常轻量级,在使用本地unix域套接字时更是如此。

更有趣的是:如果您使用要求连接不更改的功能,该怎么办?像插入数据集然后选择LAST_INSERT_ID()?如果使用只读连接,则无效。

虽然我认为使用只读用户帐户有利于安全性,但只有在脚本中使用的唯一帐户才有意义。否则你会有一些逻辑根据查询类型决定使用什么连接 - 如果你自动使用正确的连接进行读取或写入,从安全角度来看,使用两个连接是没有意义的。

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

总而言之:使用多个连接来完成一个连接可以做的事情似乎是一个坏主意 - 除非你能给出更多理由,为什么你这样做。

再次阅读你的问题,我意外地发现了你的特殊原因:你执行任意的SQL语句。这样,使用受限制的帐户真的很有意义。打开和关闭等待写入连接也没有意义。执行此操作的唯一原因是数据库服务器是否达到其配置的并发连接限制。

答案 1 :(得分:1)

您目前的解决方案非常精确,只要您可以清楚地跟踪哪个连接是哪个,甚至可以轻松扩展到主从方案。 只是为了在你需要的时候打开一个写连接,但是在短暂的网络请求世界中(我假设我们正在谈论),只要你拥有它打开它就好了让它打开以备不时之需,或者在请求大概结束后0.5秒后自动关闭它。

如果我们要谈论永久运行守护进程,请务必在N秒/分钟无活动后关闭连接,并且您可能还有多个连接,这使您能够异步运行多个查询。 / p>