簡體   English   中英

以下是為Pear DB實現數據庫連接池的正確方法嗎?

[英]Is the following the right way to implement database connection pool for Pear DB?

據我所知沒有連接在PHP集中在PHP連接池 ,目前我們正在使用PEAR DB。

我有一個遺留的cron作業代碼,該代碼使用pear DB連接。

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. DB連接在池中呆了很長時間(一個星期說)后,它會保持有效嗎?
  2. 可能會耗盡數據庫資源? 如果是的話,什么是處理不斷增長的池的合適機制?

這不是有關您的PHP代碼的問題。 必須在數據庫系統中配置連接超時和最大同時連接數。

使用mysql時:

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

超時: 通過python連接時,如何更改默認的Mysql連接超時?

我認為connect_timeout = 0意味着mysql數據庫將嘗試保持連接盡可能長的打開時間。 據我所知,沒有用於無限連接(相對於系統資源)的配置選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM