JDBC 再升級 — connection pool 牛刀小試

這回要透過一個簡單的例子,讓大家實際感受使用了 connection pool 前後的差異!

  1. 把這個專案 clone 下來
    https://github.com/kennyliao1982/demo-connection-pooling
  2. 在專案根目錄下執行  mvn test
  3. 從console log 就可以看出測試的數據囉!

    *測試說明:測試方式為開關 connection 5000 次,並計算其平均以及全部所花費的時間 (單位是毫秒),由上圖可看出

    • 最慢: NoConnectionPoolingTest,開關一次 connection要 7.106 毫秒,跑完5000回合需要35530毫秒
    • 最快: HikariConnectionPoolingTest,開關一次 connection要 0.017 毫秒,跑完5000回合需要85毫秒

看到這裡,相信大家已經深刻的體會到 connection pool 對於效能優化帶來多麼大的幫助。 connection pool 在市面上有不少團隊推出自己的實作: c3p0, dbcp2, BoneCP, tomcat, vibur, HikariCP…等等,經由上面的簡單測試可以稍微比較一下哪家的效能比較好


如果對於上面測試的程式有興趣的同學,可參考以下說明:

  • 使用了快速、輕巧的資料庫H2 database,可以內嵌在應用程式裡,方便執行測試
  • 基於JUnit,可參考 AbstractConnectionTest.java
    • 在@BeforeClass, @AfterClass 裡啟動/關閉H2資料庫
    • 標註了 @Test的 testOpenCloseConnections 為主要測試流程
    • abstract method initDataSource() 由子類別自行實作,這是 design pattern 的 Template (method) pattern

Facebook Comments