【问题标题】:How to handle concurrent DB connections by multiple users using PDO in PHP5如何在 PHP5 中使用 PDO 处理多个用户的并发数据库连接
【发布时间】:2014-04-24 06:11:46
【问题描述】:

我想在我的应用程序中使用 PDO。但是我对这里使用 PDO 感到困惑。因为我的应用程序访问目标将是多个用户。假设同时有 100 个用户。因此,当我阅读 PDO 时,它将创建 100 个 db 连接来访问。这可能会产生问题,因为它将限制服务器允许的并发连接。新用户会出现连接错误。

我如何使用 PDO 来处理并发连接而不产生开销?

【问题讨论】:

  • 我认为你误解了它是如何工作的 - 做一些谷歌搜索,但相信我 PDO 即使在一个普通的服务器上也能处理 500 个并发用户而不会费力。
  • 这不是主要取决于数据库本身而不是应用程序吗?
  • PDO 可以处理许多连接。但是 MySQL 服务器在共享主机上限制了 openn 连接。与 PDO 一样,我们不确定连接何时关闭...所以它会占用活动连接...
  • 如果您期望有 100 个 并发 用户,那么您可能超出了共享主机的范围。如果您的共享主机不提供此功能,您自己的私有服务器可以: 使用任意数量的不同策略的连接池,具体取决于您的数据库(例如,我是 Postgres 的 pgbouncer 的粉丝)。

标签: php mysql pdo


【解决方案1】:

100 个并发用户并不是那么令人印象深刻的数字。以用户平均每分钟点击一次为例,我们有 100 次连接,持续 60 秒,即每秒 1.5 次连接。
一个精心编写的应用程序应该不再执行 0.1 秒。意味着一秒钟内可以连接 10 个连接。我们有 1.5。

是的,它有时会达到峰值,但无论如何,允许的连接数是我最不想考虑的事情。由于不正确的索引和架构,您的数据库很可能会在达到限制之前被终止。

【讨论】:

  • 100 个用户只是一个假设。我的观点是,当我阅读 baout PDO 时,如果没有找到任何空闲连接,它只会打开新连接.. 这样我们就会发现活动连接增加到 MYSQL 最大值。连接支持级别。那么有什么方法可以使用 PDO 克服这些可能性。我也看不到有关 PDO 连接生命周期的信息。
  • 您很可能将 PDO 与持久连接混淆了。
  • 好的..所以你的意思是说,如果我使用非持久性的PDO,我不会想出上述情况..如果我错了,请纠正我。 PDO 非持久性生命周期:1) 脚本启动 - getconnection 2) 连接活动 3) 脚本结束 - 连接关闭。现在,对于新脚本,将建立新的连接。
  • 是的。尽管 PDO 可以 设置为持久模式,正如它在另一个答案中所说的那样,但默认情况下它的行为与您所说的完全一样。
【解决方案2】:

您可以使用持久连接。 PDO 不会关闭并重新打开,而是返回未使用的连接。这应该会减少开销以及打开的连接数量。

http://www.php.net/manual/en/pdo.connections.php

【讨论】:

  • “以及打开的连接数量”是一个纯粹的幻想,与前面的陈述没有任何关系。但是可以从中看出有“未使用” - 即 - 占用连接
  • 不幸的是,在这个有福的网站上,我们无法信任投票机制来处理超出基本语法问题的问题
  • @YourCommonSense 请指正,我也想学点新东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-10
  • 2019-12-16
  • 2016-04-02
  • 2012-03-16
  • 2016-07-17
相关资源
最近更新 更多