以下是为Pear DB实现数据库连接池的正确方法吗?

时间:2014-06-19 07:14:19

标签: php database pear

我知道PHP Connection pooling in PHP中没有连接池,我们目前正在使用Pear DB。

我有一个传统的cron作业代码,它使用的是梨数据库连接。

while (true) {
    ...
    foreach ($keys as $key) {
        $connection_string = get_connection_string_based_on_key($key);
        $DB = & \DB::connect($connection_string);
        ...
        // Avoid resource leakage.
        $DB->disconnect();
    }
}

我们意识到DB::connect确实给了我们一些性能热点。我计划建立一个伪连接池

$pool = array();
while (true) {
    ...
    foreach ($keys as $key) {
        $connection_string = get_connection_string_based_on_key($key);
        if (array_key_exists ($connection_string, $pool) {
            $DB = $pool[$connection_string];
        } else {
            $DB = & \DB::connect($connection_string);
            $pool[$connection_string] = $DB;
        }

        ...
        // No $DB->disconnect(); As we want the 
        // DB connection remains valid inside the pool.
    }
}

cron作业可能会运行几天,几周或几个月。我想知道,这样的伪连接池背后是否有任何问题?例如,

  1. 数据库连接在池内长时间保持有效(一周说)?
  2. 可能耗尽数据库资源?如果是的话,什么是处理不断增长的池的合适机制?

1 个答案:

答案 0 :(得分:1)

这不是关于PHP代码的问题。必须在数据库系统中配置连接超时和最大并发连接数。

使用mysql时:

连接: http://www.electrictoolbox.com/update-max-connections-mysql/

超时: How can I change the default Mysql connection timeout when connecting through python?

我认为connect_timeout = 0意味着mysql db会尽可能地保持连接打开。 据我所知,没有无限连接的配置选项(就系统资源而言)。