解釋:
連接池(Connection Pool)技術的核心思想是:連接復用,通過建立一個數據庫連接池以及一套連接使用、分配、管理策略,使得該連接池中的連接可以得到高效、安全的復用,避免了數據庫連接頻繁建立、關閉的開銷。另外,由於對JDBC中的原始連接進行了封裝,從而方便了數據庫應用對於連接的使用(特別是對於事務處理),提高了開發效率,也正是因為這個封裝層的存在,隔離了應用的本身的處理邏輯和具體數據庫訪問邏輯,使應用本身的復用成為可能。連接池主要由三部分組成:連接池的建立、連接池中連接的使用管理、連接池的關閉。
數據庫連接池
數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數據庫連接來避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。
數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些
數據庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大
數據庫連接數量限定了這個連接池能占有的
最大連接數,當
應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。
數據庫連接池的最小連接數和
最大連接數的設置要考慮到下列幾個因素:
1. 最小連接數
2.最大連接數
是連接池能申請的最大連接數,如果
數據庫連接請求超過此數,后面的數據庫連接請求將被加入到等待隊列中,這會影響之后的數據庫操作。
3).最小連接數與最大連接數相差太大
那么最先的連接請求將會獲利,之后超過最小連接數量的連接請求等價於建立一個新的
數據庫連接。不過,這些大於最小連接數的
數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時后被釋放。
連接池基本的思想是在系統初始化的時候,將數據庫連接作為對象存儲在內存中,當用戶需要訪問數據庫時,並非建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。使用完畢后,用戶也並非將連接關閉,而是將連接放回連接池中,以供下一個請求訪問使用。而連接的建立、斷開都由連接池自身來管理。同時,還可以通過設置連接池的參數來控制連接池中的初始連接數、連接的上下限數以及每個連接的最大使用次數、最大空閑時間等等。也可以通過其自身的管理機制來監視數據庫連接的數量、使用情況等。
在Java中開源的數據庫連接池有以下幾種 :
1, C3P0 C3P0是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate
[1]
一起發布,包括了實現jdbc3和jdbc2擴展規范說明的Connection 和Statement 池的DataSources 對象。
2,Proxool 這是一個Java SQL Driver驅動程序,提供了對你選擇的其它類型的驅動程序的連接池封裝。可以非常簡單的移植到現存的代碼中。完全可配置。快速,成熟,健壯。可以透明地為你現存的JDBC驅動程序增加連接池功能。
4,DDConnectionBroker DDConnectionBroker是一個簡單,輕量級的
數據庫連接池。
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等。
11,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分析語義實現的