2020-10-09|閱讀時間 ‧ 約 3 分鐘

Connection Pool (連線池)

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」等等,當然也可以自己實作囉。
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.