连接池与PHP, Zend框架和PostgreSQL


Connection pooling with PHP, Zend Framework and PostgreSQL

环境:PostgreSQL 9.2, PHP 5.3, Zend Framework 1

我每分钟在几个服务器上执行数百个PHP脚本(从shell启动,而不是作为WWW服务器请求),这些脚本在Zend框架pdo_pgsql连接到PostgreSQL中使用。平均脚本执行时间约为15秒,大部分时间不使用数据库。现在,每个脚本在开始时打开数据库连接,并在结束时关闭它。这是低效的,所以我决定脚本将关闭和重新打开数据库连接在执行过程中几次。

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

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

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

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