PHP、MySQL 和大量简单查询
Posted
技术标签:
【中文标题】PHP、MySQL 和大量简单查询【英文标题】:PHP, MySQL and a large nummer of simple queries 【发布时间】:2010-08-30 09:00:57 【问题描述】:我正在实现一个应用程序,该应用程序将有很多客户端从我的网络服务器查询大量小数据包。现在我不确定是否使用持久数据连接到数据库。该数据库目前与网络服务器位于同一系统上,并且可以通过套接字进行连接,但这可能会在不久的将来发生变化。
据我所知,在 php 之前的几个版本中,mysqli_pconnect 已被删除,因为它的表现欠佳。与此同时,它似乎又回来了。
根据我的情况,我想我不会再有机会处理每分钟数千个查询,但要处理大量持久连接和每个连接只保留很少资源的 MySQL 配置,对吧?
感谢您的意见!
【问题讨论】:
请注意,共享持久连接的所有客户端也共享在其上创建的临时表(在连接完成之前临时表不会被回收)。 【参考方案1】:测试时发生了什么?
有了世界上的巢穴,没有实用的方法可以传达人们在 SO 响应中提供明确答案所需的所有信息。但是通常在建立 mysql 连接时开销很小,特别是如果它与数据库客户端(在本例中为 web 服务器)驻留在同一系统上。如果您使用文件系统而不是网络套接字,则开销会更少。
因此,我建议您将所有数据库调用抽象化,这样您就可以轻松地在连接类型之间切换,但编写您的系统以使用按需连接,并确保您的代码尽快显式释放连接 - 然后看看它是如何实现的行为。
C.
【讨论】:
好的,谢谢!测试场景并不容易。我只想做好准备,而不是立即遇到问题。【参考方案2】:Are PHP persistant connections evil?
问题是只能这样 主机之间有许多活动连接 “Apache”和主机“MySQL”
持久连接通常会导致您达到最大连接数的问题。此外,在您的情况下,它并没有带来很大的好处,因为您的数据库服务器位于同一主机上。暂时保持正常连接。
【讨论】:
【参考方案3】:正如他们所说,您的情况可能会有所不同,但我从未有过使用 PHP 持久连接的良好体验,包括 MySQL 和 Oracle(ODBC 和 OCI8)。每次我测试它时,系统都无法重用连接。在高负载下,我最终达到了上限,而我有数百个空闲连接。
所以我的建议是你实际尝试一下,看看你的设置是否正确地重用了连接。如果它没有按预期工作,无论如何也不会造成太大损失:与其他 DBMS 相比,打开 MySQL 连接并不是特别昂贵。
此外,不要忘记在适当的时候重置所有相关设置(无论您更改什么会话值,它都会等待您下次建立连接并碰巧重用该连接)。
【讨论】:
以上是关于PHP、MySQL 和大量简单查询的主要内容,如果未能解决你的问题,请参考以下文章
哪个更快/更高效——大量的小 MySQL 查询或一个大的 PHP 数组?
如何使用 php 和 mysql 优化这个简单的数据库和查询?