繁体   English   中英

每个PHP应用程序是否同时保持两个MySQL连接打开是一个好习惯?

[英]Is holding two MySQL connections open simultaneously per PHP application good practice?

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

在执行只读用户的查询时,它将使具有写功能的用户连接保持打开状态。 据我所知,这是最好的方法,但是我的大学担心MySQL的某种不习惯做法,因此希望关闭具有写功能的用户的连接并稍后重新打开它(大概是因为它使与该连接的并发连接数增加了一倍) MySQL。)执行此操作的最佳方法是什么?

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

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

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

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

虽然我确实认为使用只读用户帐户对安全性有益,但只有在脚本中使用的唯一帐户才有意义。 否则,您将以某种方式根据查询的类型来决定要使用的连接的逻辑-如果您将自动使用正确的连接进行读取或写入,则从安全角度来看,使用两个连接是没有意义的。

另外,如果SELECT将连接到另一个连接,则在事务期间您将无法使用SELECT语句。

总而言之:使用多个连接来完成一个连接也可以做的事情似乎是一个坏主意-除非您可以提供更多理由说明这样做。

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

只要您可以清楚地知道哪个连接是哪个,您当前的解决方案就可以证明是很好的,甚至具有可以轻松扩展到主从场景的优点。 也有一些只打开,当你需要它写入连接的说法,但在Web请求(我假设我们正在谈论)的短命的世界,只要你把它打开它只是罚款任由如果您需要它,或者大概在请求结束后0.5秒后自动关闭它。

如果我们要谈论永久运行的守护程序,则一定要在无活动的N秒/分钟后关闭连接,无论如何您可能会有一个以上的连接,从而使您能够异步运行多个查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM