轉貼下Wallace Hu 寫的介紹,
Connection Pool Introduction
Connection Pool(連線池) 是一種資料庫連線管理的機制,它介於應用程式與資料庫之間;
集中管理資料庫的連線,能有效提升應用程式存取資料庫的效能及減少連線的錯誤。
為什麼要有Connection Pool呢?
如圖一,一般沒有使用Connection Pool的程式,當需要存取資料庫時,
便要建立一個直接與DB相連的連線(Physical Connection)。
此做法比較不好的地方在於:
1.資料庫連線的建立成本是昂貴的,故當有許多Thread都需要建立connection時,
其資源的耗費是龐大的。
2. 一個成本昂貴的connection在程式使用完後,馬上就被Close掉,在使用上並沒有達到效益極大化。
3. 程式中請求建立的總連線數可能超過DB允許的連線數而發生Exception。
4. 程式中關於connection的使用若有不恰當的地方,如Statement或Connection沒有close,
並沒有額外的機制提供保護。
當然目標若只是建立小型的AP,可預期的連線數也不多時;其實是不需要Connection Pool的。
而若目標是建立能處理同時間大量連線請求的AP時,Connection Pool就是不可或缺的機制了。
AP中加入Connection Pool後,其運行機制如圖二所示。程式啟動時,
Connection Pool會先跟DB建立好連線(連線數可設定),並且keep住這些連線;
當程式需要使用Connection時,pool便會將手上可用的Connection借給程式,
程式使用完後再歸還給Pool即可。
使用Connection Pool的好處有:
1. Pool會keep住與DB的連線。程式需要使用時跟pool要即可。
不用再重複地跟DB建立連線然後又釋放掉。
2. 可設定與DB最大的連線數,避免超過DB所能負擔的連線數。
3. Pool可幫忙驗證Connectin是否還正常,若不正常時,便再與DB建立好的正常連線,
確保程式取得的Connection都是正常可使用的。
4. 額外功能的提供。如幫忙檢查Connection State或幫忙關閉Statement等。
不同的Connection Pool其額外提供的功能當然也會有所不同。
集中管理資料庫的連線,能有效提升應用程式存取資料庫的效能及減少連線的錯誤。
為什麼要有Connection Pool呢?
如圖一,一般沒有使用Connection Pool的程式,當需要存取資料庫時,
便要建立一個直接與DB相連的連線(Physical Connection)。
圖一 Application_without_ConnectionPool
|
1.資料庫連線的建立成本是昂貴的,故當有許多Thread都需要建立connection時,
其資源的耗費是龐大的。
2. 一個成本昂貴的connection在程式使用完後,馬上就被Close掉,在使用上並沒有達到效益極大化。
3. 程式中請求建立的總連線數可能超過DB允許的連線數而發生Exception。
4. 程式中關於connection的使用若有不恰當的地方,如Statement或Connection沒有close,
並沒有額外的機制提供保護。
當然目標若只是建立小型的AP,可預期的連線數也不多時;其實是不需要Connection Pool的。
而若目標是建立能處理同時間大量連線請求的AP時,Connection Pool就是不可或缺的機制了。
AP中加入Connection Pool後,其運行機制如圖二所示。程式啟動時,
Connection Pool會先跟DB建立好連線(連線數可設定),並且keep住這些連線;
當程式需要使用Connection時,pool便會將手上可用的Connection借給程式,
程式使用完後再歸還給Pool即可。
圖二 Application_with_ConnectionPool
|
1. Pool會keep住與DB的連線。程式需要使用時跟pool要即可。
不用再重複地跟DB建立連線然後又釋放掉。
2. 可設定與DB最大的連線數,避免超過DB所能負擔的連線數。
3. Pool可幫忙驗證Connectin是否還正常,若不正常時,便再與DB建立好的正常連線,
確保程式取得的Connection都是正常可使用的。
4. 額外功能的提供。如幫忙檢查Connection State或幫忙關閉Statement等。
不同的Connection Pool其額外提供的功能當然也會有所不同。
Good post
回覆刪除您的文章描述得相當詳細,對我很有幫助,絕對不是廢文,感謝分享!!
回覆刪除