效能之王HiKariCP和阿里爸爸Druid比較

2021-10-24 21:40:29 字數 2405 閱讀 9927

我們所熟知的c3p0,dbcp,druid, hikaricp為我們所常用的資料庫連線池,

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

hikaricp

優化**和*** :減少**,例如hikaricp的statement proxy只有100行**,只有bonecp的十分之一;

自定義陣列型別(faststatementlist)代替arraylist :避免每次get()呼叫都要進行range check,避免呼叫remove()時的從頭到尾的掃瞄;

自定義集合型別(concurrentbag :提高併發讀寫的效率;

其他針對bonecp缺陷的優化。

hikari在springboot2.0上預設使用無需配置

druid 相對於其他資料庫連線池的優點

druid提供效能卓越的連線池功能外,還整合了sql監控,黑名單攔截等功能,

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

a. 監控sql的執行時間、resultset持有時間、返回行數、更新行數、錯誤次數、錯誤堆疊資訊;

b. sql執行的耗時區間分布。什麼是耗時區間分布呢?比如說,某個sql執行了1000次,其中01毫秒區間50次,110毫秒800次,10100毫秒100次,1001000毫秒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層的擴充套件外掛程式。

接下來我們使用jmeter多執行緒測試不同連線池帶來的效率,更直觀的檢視連線池的效率問題。

測試新增介面對比

druid連線池效能測試

hikari連線池效能測試

測試查詢介面對比

druid連線池效能測試

hikari連線池效能測試

由上面做出的新增和查詢介面測試可看出,druid和hikaricp連線池效能差異明顯,但是礙於資料吞吐以及在資料請求時網路和程式**的外界因素,

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

關於穩定性的圖:

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

針對現在更多的連線池,我們也應該結合專案情況,選擇相應合適的連線池

讀寫鎖效能之王 StampedLock

stampedlock是jdk1.8中新增的乙個讀寫鎖,也是對jdk1.5中的讀寫鎖reentrantreadwritelock的優化。主要包括讀寫鎖之間的轉換及更加細粒度併發控制等,前者提供的是不可重入鎖,後者的是可重入鎖,但是前者通過了樂觀讀鎖在多執行緒併發中的讀多情況下有更好的效能,因為sta...

阿里筆試題 森林之王 python 實現

題目描述 動物之王 選動物老大,n個小動物,編號1 n,編號代表武力值,值越小,武力值越高,每個小動物都有一票投票權,可以投給自己或者自己崇拜的動物,或者和自己崇拜的動物跟票。只能崇拜武力值比自己厲害的動物。輸入 第一行 n個動物 4 後面n行 第幾個小動物的崇拜物件 0 1 1 1 輸出 每個小動...

阿里雲 雲盤效能評測

評測工具 fio 工具官網 ecs配置 cpu 2核 記憶體 8 gb os centos7 yum install fio y 測試隨機寫iops fio direct 1 iodepth 128 rw randwrite ioengine libaio bs 4k size 1g numjobs...