1. 連接池是什麼?
連接池是一種用於提高具有動態數據庫驅動內容的應用程序性能的技術。打開和關閉數據庫連接可能看起來不是昂貴的費用,但它可以相當快地加起來。假設建立連接需要5ms,執行查詢需要5ms(完全編號),50%的時間是建立連接。將此擴展到數千或數萬個請求,並且浪費了大量網絡時間。連接池本質上是開放數據庫連接的緩存。打開並使用數據庫連接而不是關閉它後,將其添加回池中。當你去獲取一個新連接時,如果池中有一個可用,它將使用該連接而不是建立另一個連接
2. 為什麼要用連接池?
- 頻繁地打開和關閉連接可能很昂貴。緩存和重用。數據庫壓力問題。
- 當活動激增時,您可以限制與數據庫的連接數。這將強制代碼阻塞,直到連接可用。這在分佈式環境中尤其有用。
- 將常見操作拆分為多個池。例如,您可以擁有一個指定用於OLAP連接的池和一個用於OLTP連接的池,每個連接具有不同的配置
3. 有哪些數據庫連接池?
- proxool 更新時間截止2008年。速度可以,穩定性稍差,發較高的情況下會出錯。
- c3p0 太古老,代碼及其複雜,不利於維護。貌似都比它強。
- dbcp 是 apache上的一個 java 連接池項目,也是 tomcat 使用的連接池組件。
- druid 是alibba出品的一個功能比較全面,且擴展性較好的數據庫連接池,比較方便對jdbc接口進行監控跟蹤等。
- BoneCP 13年前最快的連接池項目。2013年後不再更新,心灰意冷。
- HikariCP 光連接池,目前被SpringBoot2官方推薦使用的數據庫連接池。
4. 各數據庫連接池測試結論
1:性能方面 HikariCP>Druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益於最大限度的避免鎖競爭。
2:druid功能最為全面,sql攔截等功能,統計數據較為全面,具有良好的擴展性。
3:綜合性能,擴展性等方面,可考慮使用druid或者hikariCP連接池。
4:可開啟prepareStatement緩存,對性能會有大概20%的提升。
5.各數據庫連接池功能對比
總結:
- 由於boneCP被hikariCP替代,並且已經不再更新,boneCP沒有進行調研。
- proxool網上有評測說在併發較高的情況下會出錯,proxool便沒有進行調研。
- druid的功能比較全面,且擴展性較好,比較方便對jdbc接口進行監控跟蹤等。
- c3p0歷史悠久,代碼及其複雜,不利於維護。並且存在deadlock的潛在風險。
閱讀更多 避風港的輕音樂23 的文章