【问题标题】:Connection pooling with PHP, Zend Framework and PostgreSQL [closed]使用 PHP、Zend 框架和 PostgreSQL 进行连接池 [关闭]
【发布时间】:2013-03-12 04:25:30
【问题描述】:

环境:独立服务器上的 PostgreSQL 9.2、PHP 5.3、Zend Framework 1

我每分钟在几台服务器上执行数百个 PHP 脚本(从 shell 启动,而不是作为 WWW 服务器请求),它们在 Zend Framework pdo_pgsql 与 PostgreSQL 的连接中使用。平均脚本执行时间约为 15 秒,大部分时间他们不使用数据库。现在每个脚本都在开始时打开数据库连接并在结束时关闭它。效率低下,所以我决定脚本在执行期间会关闭并重新打开数据库连接几次。

但重新打开与数据库的连接也效率低下。由于我的 PHP 脚本作为单独的进程(而不是 WWW 服务器工作程序)运行,因此无法使用 PHP 持久连接。在我看来,最好的解决方案是在每台服务器上使用连接池系统,它将为 PHP 脚本存储到 PostgreSQL 的连接。

我说的对吗?如果是,您推荐使用 PHP、Zend 框架(pdo_pgsql 适配器)和 PostgreSQL 的哪个连接池系统?

【问题讨论】:

  • 您尝试过使用互联网吗? --> wiki.postgresql.org/wiki/…
  • 我有使用 PgBouncer 和 Pgpool 的经验。当我将它们用于连接池时,我只喜欢更简单的 PgBouncer。以我的经验,Pgpool 更难设置并且有些错误,而 PgBouncer 只是设置并忘记。它与客户无关。它不知道客户端是 PHP 脚本还是什么。无论如何,它都会提供连接。
  • 尽管同意 James 的评论,但 +1 感谢您提供 Pg 版本并清楚地描述您的情况。感谢您努力清晰地沟通。

标签: php postgresql zend-framework connection-pooling


【解决方案1】:

PgBouncer 非常适合这项工作。如果在会话池模式(默认)中使用,它将减少连接开销,而不会增加其他不必要的复杂性。更激进的池模式(如事务池或语句池)确实会影响客户端应用程序,因此您应该只在实际需要时才使用它们。

更多信息可以在 on the PostgreSQL wiki 上找到,正如 James 指出的那样。

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-05-17
    • 2011-04-08
    • 1970-01-01
    • 2011-11-24
    • 2014-12-15
    • 1970-01-01
    相关资源
    最近更新 更多