Connection Pool (連線池)

閱讀時間約 2 分鐘
Connection Pool中文為連線池,是位於DB前面的緩衝區。
假如我們只是要一個簡單的query功能,下了一個簡單的查詢SQL,可是卻花了很多時間執行,而且每次都要花這麼多時間,這樣豈不是很浪費嗎?
然而,花時間的地方可能不是你SQL效能的問題,而是你沒使用connection pool。

對我們來說,可能會認為只是簡單的一個查詢,其實做了以下這麼多事情:
程式中我們常寫的getConnection(),包含了DB user帳密驗證,建立與資料庫的socket連線,接著我們會執行SQL,如executeQuery(),最後會有close()來關閉連線。
也就是說,每次我要下SQL去做某些事情的時候,都要重複一次上述的過程。
然而,對資料庫來說,connection的建立跟關閉,是很消耗資源的,一個簡單的查詢,這個SQL執行可能只需要0.1秒,但卻花了2秒在做建立連線跟關閉,假如有大量的建立連線跟關閉同時出現,不只對資料庫有很大的衝擊,也會拖垮系統效能。
因此,就有connection pool的誕生了,可想像它是一個在資料庫前面的緩衝區或快取區,程式一執行就會建立好固定的連線數量,儲存在pool中,在程式需要連線的時候,getConnection()其實是到pool裡面去拿,不需要再花時間跟DB建立連線。
關閉連線的時候,close()其實是把連線放回pool,以便於後續能重複使用。

因此,connection pool的存在,可以降低對資料庫建立連線/關閉的次數,因為pool中的連線是可重複使用的,且每次的連線都是從pool中取得。

此外,市面上的框架通常會提供很多設定功能,可以管理pool中的連線,如初始、最大連線數量,對閒置連線的處置等等,適當調整參數也能增進效能。
除了這些設定功能以外,connection pool還會自動檢查連線狀態,確保能keep設定的最大連線數,可以說是好處多多。
常用的connection pooling JDBC framework如「Apache Commons DBCP」、「HikariCP」、「C3PO」等等,當然也可以自己實作囉。
為什麼會看到廣告
20會員
161內容數
留言0
查看全部
發表第一個留言支持創作者!