資料庫連線池的影響因素

  資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個,那麼你對資料庫連線池瞭解多少呢?以下是由小編整理關於什麼是資料庫連線池的內容,希望大家喜歡!

  資料庫連線池的背景

  資料庫連線是一種關鍵的、有限的、昂貴的資源,這一點在多使用者的網頁應用程式中體現得尤為突出。對資料庫連線的管理能顯著影響到整個應用程式的伸縮性和健壯性,影響到程式的效能指標。資料庫連線池正是針對這個問題提出來的。

  

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

  1. 最小連線數

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

  2. 最大連線數

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

  3. 最小連線數與最大連線數差距

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

  資料庫連線池的原理

  連線池基本的思想是在系統初始化的時候,將資料庫連線作為物件儲存在記憶體中,當用戶需要訪問資料庫時,並非建立一個新的連線,而是從連線池中取出一個已建立的空閒連線物件。使用完畢後,使用者也並非將連線關閉,而是將連線放回連線池中,以供下一個請求訪問使用。而連線的建立、斷開都由連線池自身來管理。同時,還可以通過設定連線池的引數來控制連線池中的初始連線數、連線的上下限數以及每個連線的最大使用次數、最大空閒時間等等。也可以通過其自身的管理機制來監視資料庫連線的數量、使用情況等。

  Java資料庫連線池

  在Java中開源的資料庫連線池有以下幾種 :

  1、C3P0:是一個開放原始碼的JDBC連線池,它在lib目錄中與Hibernate一起釋出,包括了實現jdbc3和jdbc2擴充套件規範說明的Connection 和Statement 池的DataSources 物件。

  2、Proxool:是一個Java SQL Driver驅動程式,提供了對選擇的其它型別的驅動程式的連線池封裝。可以非常簡單的移植到現存的程式碼中,完全可配置,快速、成熟、健壯。可以透明地為現存的JDBC驅動程式增加連線池功能。

  3、Jakarta DBCP:DBCP是一個依賴Jakartacommons-pool物件池機制的資料庫連線池。DBCP可以直接的在應用程式中使用。

  4、DDConnectionBroker:是一個簡單、輕量級的資料庫連線池。

  5、DBPool:是一個高效、易配置的資料庫連線池。它除了支援連線池應有的功能之外,還包括了一個物件池,使使用者能夠開發一個滿足自己需求的資料庫連線池。

  6、XAPool:是一個XA資料庫連線池。它實現了javax.sql.XADataSource並提供了連線池工具。

  7、Primrose:是一個Java開發的資料庫連線池。當前支援的容器包括Tomcat4&5、Resin3與JBoss3。它同樣也有一個獨立的版本,可以在應用程式中使用而不必執行在容器中。Primrose通過一個WEB介面來控制SQL處理的追蹤、配置,以及動態池管理。在重負荷的情況下可進行連線請求佇列處理。

  8、SmartPool:是一個連線池元件,它模仿應用伺服器物件池的特性。SmartPool能夠解決一些臨界問題如連線洩漏***connection leaks***、連線阻塞、開啟的JDBC物件***如Statements、PreparedStatements***等。SmartPool的特性包括:

  支援多個pool

  自動關閉相關聯的JDBC物件

  在所設定time-outs之後察覺連線洩漏

  追蹤連線使用情況

  強制啟用最近最少用到的連線

  把SmartPool“包裝”成現存的一個pool

  9、MiniConnectionPoolManager:是一個輕量級JDBC資料庫連線池。它只需要Java1.5***或更高***並且沒有依賴第三方包。

  10、BoneCP:是一個快速、開源的資料庫連線池。幫使用者管理資料連線,讓應用程式能更快速地訪問資料庫。比C3P0/DBCP連線池速度快25倍。

  11、Druid:Druid不僅是一個數據庫連線池,還包含一個ProxyDriver、一系列內建的JDBC元件庫、一個SQL Parser。

  支援所有JDBC相容的資料庫,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。

  Druid針對Oracle和MySql做了特別優化,比如:

  Oracle的PS Cache記憶體佔用優化

  MySql的ping檢測優化

  Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支援,這是一個手寫的高效能SQL Parser,支援Visitor模式,使得分析SQL的抽象語法樹很方便。

  簡單SQL語句用時10微秒以內,複雜SQL用時30微秒。

  通過Druid提供的SQL Parser可以在JDBC層攔截SQL做相應處理,比如說分庫分表、審計等。Druid防禦SQL注入攻擊的WallFilter,就是通過Druid的SQL Parser分析語義實現的