010--HikariCP最快資料庫連線池

weixin_34247155發表於2017-12-14
1096351-6af7248e0fc1beb8.png
HikariCP

1.HikariCP特點

  • 1、位元組碼精簡:優化程式碼,直到編譯後的位元組碼最少,這樣,CPU快取可以載入更多的程式程式碼;
  • 2、優化代理和攔截器:減少程式碼,例如HikariCP的Statement proxy只有100行程式碼,只有BoneCP的十分之一;
  • 3、自定義陣列型別(FastStatementList)代替ArrayList:避免每次get()呼叫都要進行range check,避免呼叫remove()時的從頭到尾的掃描;
  • 4、自定義集合型別(ConcurrentBag):提高併發讀寫的效率;
  • 5、其他針對BoneCP缺陷的優化,比如對於耗時超過一個CPU時間片的方法呼叫的研究(但沒說具體怎麼優化)。

2.HikariCP相關地址

3.HikariCP連線配置

  • Java 8 maven artifact:
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP</artifactId>
        <version>2.7.4</version>
    </dependency>
  • Java 9 Early Access maven artifact:
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP-java9ea</artifactId>
        <version>2.6.1</version>
    </dependency>
  • Java 7 maven artifact (maintenance mode):
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP-java7</artifactId>
        <version>2.4.13</version>
    </dependency>
  • Java 6 maven artifact (maintenance mode):
    <dependency>
        <groupId>com.zaxxer</groupId>
        <artifactId>HikariCP-java6</artifactId>
        <version>2.3.13</version>
    </dependency>
  • 資料庫配置連線:
<!-- Hikari Datasource -->  
<bean id="dataSourceHikari" class="com.zaxxer.hikari.HikariDataSource"  destroy-method="shutdown">  
 <!-- <property name="driverClassName" value="${db.driverClass}" /> --> <!-- 無需指定,除非系統無法自動識別 -->  
 <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" />  
 <property name="username" value="${db.username}" />  
 <property name="password" value="${db.password}" />  
  <!-- 連線只讀資料庫時配置為true, 保證安全 -->  
 <property name="readOnly" value="false" />  
 <!-- 等待連線池分配連線的最大時長(毫秒),超過這個時長還沒可用的連線則發生SQLException, 預設:30秒 -->  
 <property name="connectionTimeout" value="30000" />  
 <!-- 一個連線idle狀態的最大時長(毫秒),超時則被釋放(retired),預設:10分鐘 -->  
 <property name="idleTimeout" value="600000" />  
 <!-- 一個連線的生命時長(毫秒),超時而且沒被使用則被釋放(retired),預設:30分鐘,建議設定比資料庫超時時長少30秒,參考MySQL wait_timeout引數(show variables like '%timeout%';) -->  
 <property name="maxLifetime" value="1800000" />  
 <!-- 連線池中允許的最大連線數。預設值:10;推薦的公式:((core_count * 2) + effective_spindle_count) -->  
 <property name="maximumPoolSize" value="15" />  
</bean>

4.資料庫連線對比

1096351-d13d045ca5daea84.png
BoneCP優勢
1096351-3d07ac483741edbb.png
連線速度比對圖

5.待完善功能

  • 連線Demo

相關文章