【问题标题】:CakePHP and connection poolingCakePHP 和连接池
【发布时间】:2014-10-31 02:29:26
【问题描述】:

我正在开发一个需要同时处理来自同一个表的多个请求的网站。我们在 CakePHP 中做了一个简单的索引页面,它从数据库中提取一些数据(准确地说是 10 行),一位同事执行了一个测试,模拟 1000 个用户同时查看同一页面,这意味着将发出 1000 个相同的请求到数据库。问题是在大约 500 个请求时,数据库停止响应,一切都冻结了,我们不得不终止进程。

我想到的是每个请求都在自己的连接上执行,这可以解释为什么 MySQL 服务器不堪重负。通过一些在线搜索和 SO,我可以看到 PHP 本身不支持连接池,例如,可以在 Java 应用程序中完成。然而,在我们的应用程序基于 CakePHP 2.5.3 的基础上,我想有一些基础机制可以克服这些限制。也许我做的不对?

欢迎任何建议,我只是想确保用尽所有可能的解决方案。

【问题讨论】:

  • 你看到database config中的persistent选项了吗?
  • 在我的配置中,persistent => 'false' 老实说,我怀疑强制持久连接到数据库是个好主意...我的意思是在当前阶段我我只从数据库中恢复 10 行,仅此而已 - 为什么要使用持久连接?所以理论上它应该在查询后释放任何资源,对吧?
  • 如果您不想在每次脚本运行或有大量多个连接时都设置和销毁连接的开销,请使用persistent。你确定你明白为什么你的数据库停止了吗?您是否阅读了日志以找出答案?您的数据库应该能够处理 500 个简单的 10 条记录选择,因为它们很可能是查询缓存的并且来自内存,所以我猜应该归咎于其他事情。另外我希望你没有在设置debug 的情况下进行测试。

标签: php mysql cakephp connection-pooling


【解决方案1】:

如果每次查询的结果都一样,你可以缓存查询结果,这样就不会向数据库发送多个请求, 试试这个插件: - https://github.com/ndejong/CakephpAutocachePlugin

【讨论】:

    猜你喜欢
    • 2012-01-15
    • 2011-01-26
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 2017-04-29
    • 2012-03-02
    相关资源
    最近更新 更多