HiKariCP和Druid對比使用整理自測

HiKariCP和Druid

我們所熟知的C3P0,DBCP,Druid, HiKariCP為我們所常用的數據庫連接池,

其中C3P0已經很久沒有更新了。DBCP更新速度很慢,基本處於不活躍狀態,而Druid和HikariCP處於活躍狀態的更新中,這就是我們說的二代產品了。

HiKariCP

  1. 字節碼精簡 :優化代碼,直到編譯後的字節碼最少,這樣,CPU緩存可以加載更多的程序代碼;
  2. 優化代理和攔截器 :減少代碼,例如HikariCP的Statement proxy只有100行代碼,只有BoneCP的十分之一;
  3. 自定義數組類型(FastStatementList)代替ArrayList :避免每次get()調用都要進行range check,避免調用remove()時的從頭到尾的掃描;
  4. 自定義集合類型(ConcurrentBag :提高併發讀寫的效率;
  5. 其他針對BoneCP缺陷的優化。

HiKari在springboot2.0上默認使用無需配置

HiKariCP和Druid對比使用整理自測


Druid 相對於其他數據庫連接池的優點

Druid提供性能卓越的連接池功能外,還集成了SQL監控,黑名單攔截等功能,

強大的監控特性,通過Druid提供的監控功能,可以清楚知道連接池和SQL的工作情況。

a. 監控SQL的執行時間、ResultSet持有時間、返回行數、更新行數、錯誤次數、錯誤堆棧信息;

b. SQL執行的耗時區間分佈。什麼是耗時區間分佈呢?比如說,某個SQL執行了1000次,其中0~1毫秒區間50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通過耗時區間分佈,能夠非常清楚知道SQL的執行耗時情況;

c. 監控連接池的物理連接創建和銷燬次數、邏輯連接的申請和關閉次數、非空等待次數、PSCache命中率等。

方便擴展。Druid提供了Filter-Chain模式的擴展API,可以自己編寫Filter攔截JDBC中的任何方法,可以在上面做任何事情,比如說性能監控、SQL審計、用戶名密碼加密、日誌等等。

Druid集合了開源和商業數據庫連接池的優秀特性,並結合阿里巴巴大規模苛刻生產環境的使用經驗進行優化。

1、替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫連接池。

2、可以監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對於線上分析數據庫訪問性能有幫助。

3、數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。

4、SQL執行日誌,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的數據庫訪問情況。

5、擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴展插件。

HiKariCP和Druid對比使用整理自測


接下來我們使用Jmeter多線程測試不同連接池帶來的效率,更直觀的查看連接池的效率問題。

測試新增接口對比

Druid連接池性能測試

HiKariCP和Druid對比使用整理自測

Hikari連接池性能測試

HiKariCP和Druid對比使用整理自測

測試查詢接口對比

Druid連接池性能測試

HiKariCP和Druid對比使用整理自測


Hikari連接池性能測試

HiKariCP和Druid對比使用整理自測

由上面做出的新增和查詢接口測試可看出,Druid和hikariCP連接池性能差異明顯,但是礙於數據吞吐以及在數據請求時網絡和程序代碼的外界因素,

測試結果可能不很準確,那來看看國外大神給出的海量測試報告。

關於穩定性的圖:

對於性能測試對比也給出了柱狀圖:

針對現在更多的連接池,我們也應該結合項目情況,選擇相應合適的連接池


分享到:


相關文章: