1. 程式人生 > >【最近面試遇到的一些問題】資料庫連線池的優點和原理,常用的java開源連線池元件

【最近面試遇到的一些問題】資料庫連線池的優點和原理,常用的java開源連線池元件

資料庫連線是一種關鍵的有限的昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而再不是重新建立一個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效能。

影響因素

資料庫連線池在初始化時將建立一定數量的資料庫連線放到連線池中,這些資料庫連線的數量是由最小資料庫連線數來設定的。無論這些資料庫連線是否被使用,連線池都將一直保證至少擁有這麼多的連線數量。連線池的最大
資料庫連線數量限定了這個連線池能佔有的最大連線數,當應用程式向連線池請求的連線數超過最大連線數量時,這些請求將被加入到等待佇列中。資料庫連線池的最小連線數和最大連線數的設定要考慮到下列幾個因素:

1) 最小連線數

  是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費;

2) 最大連線數

  是連線池能申請的最大連線數,如果資料庫連線請求超過此數,後面的資料庫連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。

3) 如果最小連線數與最大連線數相差太大,

  那麼最先的連線請求將會獲利,之後超過最小連線數量的連線請求等價於建立一個新的
資料庫連線。不過,這些大於最小連線數的資料庫連線在使用完不會馬上被釋放,它將被放到連線池中等待重複使用或是空閒超時後被釋放。

Java中開源的資料庫連線池

原理   連線池基本的思想是在系統初始化的時候,將資料庫連線作為物件儲存在記憶體中,當用戶需要訪問資料庫時,並非建立一個新的連線,而是從連線池中取出一個已建立的空閒連線物件。使用完畢後,使用者也並非將連線關閉,而是將連線放回連線池中,以供下一個請求訪問使用。而連線的建立、斷開都由連線池自身來管理。同時,還可以通過設定連線池的引數來控制連線池中的初始連線數、連線的上下限數以及每個連線的最大使用次數、最大空閒時間等等。也可以通過其自身的管理機制來監視
資料庫連線的數量、使用情況等。   在Java中開源的資料庫連線池有以下幾種 :   1, C3P0 C3P0是一個開放原始碼的JDBC連線池,它在lib目錄中與Hibernate一起釋出,包括了實現jdbc3和jdbc2擴充套件規範說明的Connection 和Statement 池的DataSources 物件。   2,Proxool 這是一個Java SQL Driver驅動程式,提供了對你選擇的其它型別的驅動程式的連線池封裝。可以非常簡單的移植到現存的程式碼中。完全可配置。快速,成熟,健壯。可以透明地為你現存的JDBC驅動程式增加連線池功能。   3,Jakarta DBCP DBCP是一個依賴Jakarta commons-pool物件池機制的資料庫連線池.DBCP可以直接的在應用程式用使用。   4,DDConnectionBroker DDConnectionBroker是一個簡單,輕量級的資料庫連線池。   5,DBPool DBPool是一個高效的易配置的資料庫連線池。它除了支援連線池應有的功能之外,還包括了一個物件池使你能夠開發一個滿足自已需求的資料庫連線池。   6,XAPool XAPool是一個XA資料庫連線池。它實現了javax.sql.XADataSource並提供了連線池工具。   7,Primrose Primrose是一個Java開發的資料庫連線池。當前支援的容器包括Tomcat4&5,Resin3與JBoss3.它同樣也有一個獨立的版本可以在應用程式中使用而不必執行在容器中。Primrose通過一個web介面來控制SQL處理的追蹤,配置,動態池管理。在重負荷的情況下可進行連線請求佇列處理。   8,SmartPool SmartPool是一個連線池元件,它模仿應用伺服器物件池的特性。SmartPool能夠解決一些臨界問題如連線洩漏(connection leaks),連線阻塞,開啟的JDBC物件如Statements,PreparedStatements等. SmartPool的特性包括支援多個pools,自動關閉相關聯的JDBC物件, 在所設定time-outs之後察覺連線洩漏,追蹤連線使用情況, 強制啟用最近最少用到的連線,把SmartPool"包裝"成現存的一個pool等。   9,MiniConnectionPoolManager MiniConnectionPoolManager是一個輕量級JDBC資料庫連線池。它只需要Java1.5(或更高)並且沒有依賴第三方包。   10,BoneCP BoneCP是一個快速,開源的資料庫連線池。幫你管理資料連線讓你的應用程式能更快速地訪問資料庫。比C3P0/DBCP連線池快25倍。