DBCP、C3P0、Proxool 、 BoneCP開源串連池的比較

來源:互聯網
上載者:User

標籤:

 

   簡介   使用評價  項目首頁
 DBCP

DBCP是一個依賴Jakarta commons-pool對象池機制的資料庫連接池.DBCP可以直接的在應用程式用使用

 

可以設定最大和最小串連,串連等待時間等,準系統都有,此串連池的持續啟動並執行穩定性還是可以,不過速度稍慢,在大並發量的壓力下穩定性有所下降,此外不提供串連池監控

 

http://homepages.nildram.

co.uk/~slink/java/DBPool/

 C3P0  C3P0是一個開放原始碼的JDBC串連池,它在lib目錄中與Hibernate一起發布,包括了實現jdbc3和jdbc2擴充規範說明的Connection 和Statement 池的DataSources 對象。

 

串連池可以設定最大和最小串連,串連等待時間等,準系統都有,串連池的持續啟動並執行穩定性相當不錯,在大並發量的壓力下穩定性也有一定保證,此外不提供串連池監控。

 

http://sourceforge.net/projects/c3p0
 Proxool  這是一個Java SQL Driver驅動程式,提供了對你選擇的其它類型的驅動程式的串連池封裝。可以非常簡單的移植到現存的代碼中。完全可配置。快速,成熟,健壯。可以透明地為你現存的JDBC驅動程式增加串連池功能。  串連池可以設定最大和最小串連,串連等待時間等,準系統都有,串連池的持續啟動並執行穩定性有一定問題,有一個優勢--串連池監控  http://proxool.sourceforge.net/
 BoneCP  BoneCP是一個快速,開源的資料庫連接池。幫你管理資料連線讓你的應用程式能更快速地訪問資料庫。比C3P0/DBCP串連池快25倍   一種新的資料連線技術,以其效率高,速度 快著稱,串連池可以設定最大和最小串連,串連等待時間等,準系統都有          

http://jolbox.com/about.html          

 
   參數說明
 DBCP  dataSource: 要串連的 datasource (通常我們不會定義在 server.xml)
defaultAutoCommit: 對於事務是否 autoCommit, 預設值為 true
defaultReadOnly: 對於資料庫是否只能讀取, 預設值為 false
driverClassName:串連資料庫所用的 JDBC Driver Class,
maxActive: 可以從對象池中取出的對象最大個數,為0則表示沒有限制,預設為8
maxIdle: 最大等待串連中的數量,設 0 為沒有限制 (對象池中對象最大個數)
minIdle:對象池中對象最小個數
maxWait: 最大等待秒數, 單位為 ms, 超過時間會丟出錯誤資訊
password: 登陸資料庫所用的密碼
url: 串連資料庫的 URL
username: 登陸資料庫所用的帳號
validationQuery: 驗證串連是否成功, SQL SELECT 指令至少要返回一行
removeAbandoned: 是否自我中斷, 預設是 false
removeAbandonedTimeout: 幾秒後會自我中斷, removeAbandoned 必須為 true
logAbandoned: 是否記錄中斷事件, 預設為 false
minEvictableIdleTimeMillis:大於0 ,進行串連空閑時間判斷,或為0,對閒置串連不進行驗證;預設30分鐘
timeBetweenEvictionRunsMillis:失效檢查線程已耗用時間間隔,如果小於等於0,不會啟動檢查線程,預設-1
testOnBorrow:取得對象時是否進行驗證,檢查對象是否有效,預設為false
testOnReturn:返回對象時是否進行驗證,檢查對象是否有效,預設為false
testWhileIdle:空閑時是否進行驗證,檢查對象是否有效,預設為false
initialSize:初始化線程數
  C  3  P  0  acquireIncrement: 當串連池中的串連耗盡的時候c3p0一次同時擷取的串連數。Default: 3
acquireRetryAttempts: 定義在從資料庫擷取新串連失敗後重複嘗試的次數。Default: 30
acquireRetryDelay: 兩次串連中間隔時間,單位毫秒。Default: 1000
autoCommitOnClose: 串連關閉時預設將所有未提交的操作復原。Defaul t: false 
automaticTestTable: c3p0將建一張名為Test的空表,並使用其內建的查詢語句進行測試。如果定義了這個參數那麼屬性preferredTestQuery將被忽略。你不 能在這張Test表上進行任何操作,它將只供c3p0測試使用。Default: null
breakAfterAcquireFailure: 擷取串連失敗將會引起所有等待串連池來擷取串連的線程拋出異常。但是資料來源仍有效保留,並在下次調用getConnection()的時候繼續嘗試擷取連 接。如果設為true,那麼在嘗試擷取串連失敗後該資料來源將申明已斷開並永久關閉。Default: false
checkoutTimeout:當串連池用完時用戶端調用getConnection()後等待擷取新串連的時間,逾時後將拋出SQLException,如設為0則無限期等待。單位毫秒。Default: 0
connectionTesterClassName: 通過實現ConnectionTester或QueryConnectionT ester的類來測試連接。類名需制定全路徑。Default: com.mchange.v2.c3p0.impl.Def aultConnectionTester
factoryClassLocation: 指定c3p0 libraries的路徑,如果(通常都是這樣)在本地即可獲得那麼無需設定,預設null即可Default: null
idleConnectionTestPeriod: 每60秒檢查所有串連池中的空閑串連。Defaul t: 0
initialPoolSize: 初始化時擷取三個串連,取值應在minPoolSize與maxPoolSize之間。Default: 3
maxIdleTime: 最大空閑時間,60秒內未使用則串連被丟棄。若為0則永不丟棄。Default: 0
maxPoolSize: 串連池中保留的最大串連數。Default: 15
maxStatements: JDBC的標準參數,用以控制資料來源內載入的PreparedSt atements數量。但由於預緩衝的statements屬於單個connection而不是整個串連池。所以設定這個參數需要考慮到多方面的因素。如 果maxStatements與maxStatementsPerConnection均為0,則緩衝被關閉。Default: 0
maxStatementsPerConnection: maxStatementsPerConnection定義了串連池內單個串連所擁有的最大緩衝statements數。Default: 0
numHelperThreads:c3p0是非同步作業的,緩慢的JDBC操作通過協助進程完成。擴充這些操作可以有效提升效能通過多線程實現多個操作同時被執行。Default: 3
overrideDefaultUser:當使用者調用getConnection()時使root使用者成為去擷取串連的使用者。主要用於串連池串連非c3p0的資料來源時。Default: null
overrideDefaultPassword:與overrideDefaultUser參數對應使用的一個參數。Default: null
password:密碼。Default: null
user:使用者名稱。Default: null
preferredTestQuery:定義所有串連測試都執行的測試語句。在使用串連測試的情況下這個一顯著提高測試速度。注意:測試的表必須在初始資料來源的時候就存在。Default: null
propertyCycle:使用者修改系統配置參數執行前最多等待300秒。Defaul t: 300 
testConnectionOnCheckout:因效能消耗大請只在需要的時候使用它。如果設為true那麼在每個connection提交 的時候都將校正其有效性。建議使用idleConnectio nTestPeriod或automaticTestTable等方法來提升串連測試的效能。Default: false 
testConnectionOnCheckin:如果設為true那麼在取得串連的同時將校正串連的有效性。Default: false
 Proxool  acquireIncrement: 當串連池中的串連耗盡的時候c3p0一次同時擷取的串連數。Default: 3
fatal-sql-exception : 它是一個逗號分割的資訊片段.當一個SQL異常發生時,他的異常資訊將與這個資訊片段進行比較.如果在片段中存在,那麼這個異常將被認為是個致命錯誤 (Fatal SQL Exception ).這種情況下,資料庫連接將要被放棄.無論發生什麼,這個異常將會被重擲以提供給消費者.使用者最好自己配置一個不同的異常來拋出.
fatal-sql-exception-wrapper-class : 正如上面所說,你最好配置一個不同的異常來重擲.利用這個屬性,使用者可以封裝SQLException,使他變成另外一個異常.這個異常或者繼承 SQLException或者繼承字RuntimeException.proxool 內建了2個實現:‘org.logicalcobwebs.proxool .FatalSQLException‘ 和‘org.logicalcobweb s.proxool .FatalRuntimeException‘ .後者更合適.
house-keeping-sleep-time : house keeper 保留線程處於睡眠狀態的最長時間,house keeper 的職責就是檢查各個串連的狀態,並判斷是否需要銷毀或者建立.
house-keeping-test-sql : 如果發現了閒置資料庫連接.house keeper 將會用這個語句來測試.這個語句最好非常快的被執行.如果沒有定義,測試過程將會被忽略。
injectable-connection-interface : 允許proxool 實現被代理的connection對象法.
injectable-statement-interface : 允許proxool 實現被代理的Statement 對象方法.
injectable-prepared-statement-interface : 允許proxool 實現被代理的PreparedS tatement 對象方法.
injectable-callable-statement-interface : 允許proxool 實現被代理的CallableStat ement 對象方法.
jmx : 如果屬性為true,就會註冊一個訊息Bean到jms服務,訊息Bean對象名: "Proxool:type=Pool, name=<alias>". 預設值為false.
jmx-agent-id : 一個逗號分隔的JMX代理列表(如使用MbeanServerFactory .fi ndMBeanServer(String agentId)註冊的串連池。)這個屬性是僅當"jmx"屬性設定為"true"才有效。所有註冊jmx伺服器使用這個屬性是不確定的
jndi-name : 資料來源的名稱
maximum-active-time : 如果housekeeper 檢測到某個線程的啟用時間大於這個數值.它將會殺掉這個線程.所以確認一下你的伺服器的頻寬.然後定一個合適的值.預設是5分鐘.
maximum-connection-count : 最大的資料庫連接數.
maximum-connection-lifetime : 一個線程的最大壽命.
minimum-connection-count : 最小的資料庫連接數
overload-without-refusal-lifetime : 這可以協助我們確定串連池的狀態。如果我們已經拒絕了一個串連在這個設定值(毫秒),然後被認為是超載。預設為60秒。
prototype-count : 串連池中可用的串連數量.如果當前的串連池中的串連少於這個數值.新的串連將被建立(假設沒有超過最大可用數).例如.我們有3個活動串連2個可用串連, 而我們的prototype-count是4,那麼資料庫連接池將試圖建立另外2個串連.這和 minimum-connection-count不同. minimum-connect ion-count把活動的串連也計算在內.prototype-count 是spare connections 的數量.
recently-started-threshold :這可以協助我們確定串連池的狀態,串連數少還是多或超載。只要至少有一個串連已開始在此值(毫秒)內,或者有一些多餘的可用串連,那麼我們假設串連池是開啟的。預設為60秒
simultaneous-build-throttle :這是我們可一次建立的最大串連數。那就是新增的串連請求,但還沒有可供使用的串連。由於串連可以使用多線程,在有限的時間之間建立聯絡從而帶來可用連 接,但是我們需要通過一些方式確認一些線程並不是立即響應串連請求的,預設是10。
statistics :  串連池使用狀況統計。 參數“10s,1m,1d”
statistics-log-level :日誌統計跟蹤類型。 參數“ERROR”或 “INFO”
test-before-use : 如果為true,在每個串連被測試前都會服務這個串連,如果一個串連失敗,那麼將被丟棄,另一個串連將會被處理,如果所有串連都失敗,一個新的串連將會被建立。否則將會拋出一個SQLException異常。
test-after-use : 如果為true,在每個串連被測試後都會服務這個串連,使其回到串連池中,如果串連失敗,那麼將被廢棄。
trace : 如果為true,那麼每個被執行的SQL語句將會在執行期被log記錄(DEBUG LEVEL).你也可以註冊一個ConnectionListener (參看ProxoolFacade)得到這些資訊
 BoneCP  acquireIncrement: 當串連池中的串連耗盡的時候c3p0一次同時擷取的串連數。Default: 3
driveClass:資料庫驅動
jdbcUrl:響應驅動的jdbcUrl
username:資料庫的使用者名稱
password:資料庫的密碼
idleConnectionTestPeriod:檢查資料庫連接池中控線串連的間隔時間,單位是分,預設值:240,如果要取消則設定為0
idleMaxAge:串連池中未使用的連結最大存活時間,單位是分,預設值:60,如果要永遠存活設定為0
maxConnectionsPerPartition:每個分區最大的串連數
minConnectionsPerPartition:每個分區最小的串連數
partitionCount:分區數,預設值2,最小1,推薦3-4,視應用而定
acquireIncrement:每次去拿資料庫連接的時候一次性要拿幾個,預設值:2
statementsCacheSize:緩衝prepared statements的大小,預設值:0
releaseHelperThreads:每個分區釋放連結助理進程的數量,預設值:3,除非你的一個資料庫連接的時間內做了很多工作,不然過多的助理進程會影響你的效能
 效能比較:

 

     
 DBCP  C3P0  Proxool  BoneCP
類比5個線程迴圈10次並發訪問資料庫  用時1181ms  用時860ms  用時1563ms  用時31ms
類比10個線程迴圈10次並發訪問資料庫  用時1188ms  用時953ms  用時1625ms  用時63ms
類比30個線程迴圈10次並發訪問資料庫  用時1250ms  用時1047ms  用時1657ms  用時156ms
類比50個線程迴圈10次並發訪問資料庫  用時1406ms  用時1343ms  用時1843ms  用時172ms
類比100個線程迴圈10次並發訪問資料庫  用時1641ms  用時2703ms  用時2031ms  用時532ms
類比200個線程迴圈10次並發訪問資料庫  用時2093ms  用時4891ms  用時2406ms  用時936ms
類比500個線程迴圈10次並發訪問資料庫 用時3219ms 用時11703ms 用時3343ms 用時1922ms
類比800個線程迴圈10次並發訪問資料庫 用時4688ms 用時12063ms 用時4141ms 用時2859ms
類比1000個線程迴圈10次並發訪問資料庫 用時5187ms 用時12563ms 用時4703m 用時3610ms
類比3000個線程迴圈10次並發訪問資料庫 用時14094ms 用時16297ms 用時11344ms 用時11391ms
類比5000個線程迴圈10次並發訪問資料庫 用時23610ms 用時22032ms 用時20125ms 用時17125ms

DBCP、C3P0、Proxool 、 BoneCP開源串連池的比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.