HikariCP連線池特性筆記
阿新 • • 發佈:2020-10-11
總結如下:
位元組碼精簡:優化程式碼,直到編譯後的位元組碼最少,這樣,CPU快取可以載入更多的程式程式碼;
優化代理和攔截器:減少程式碼,例如HikariCP的Statement proxy只有100行程式碼,只有BoneCP的十分之一;
自定義陣列型別(FastStatementList)代替ArrayList:避免每次get()呼叫都要進行range check,避免呼叫remove()時的從頭到尾的掃描;
自定義集合型別(ConcurrentBag):提高併發讀寫的效率;
關於可靠性方面,也是有實驗和資料支援的。對於資料庫連線中斷的情況,通過測試getConnection(),各種CP的不相同處理方法如下:
HikariCP:等待5秒鐘後,如果連線還是沒有恢復,則丟擲一個SQLExceptions 異常;後續的getConnection()也是一樣處理;
C3P0:完全沒有反應,沒有提示,也不會在“CheckoutTimeout”配置的時長超時後有任何通知給呼叫者;然後等待2分鐘後終於醒來了,返回一個error;
Tomcat:返回一個connection,然後……呼叫者如果利用這個無效的connection執行SQL語句……結果可想而知;大約55秒之後終於醒來了,這時候的getConnection()終於可以返回一個error,但沒有等待引數配置的5秒鐘,而是立即返回error;