連接池,數據庫連接池

連接池

連接池是什麼?

連接池是創建和管理一個連接的緩衝池的技術,這些連接準備好被任何需要它們的線程使用。

連接池的優點

  • 減少連接創建時間
  • 簡化的編程模式
  • 受控的資源使用

注:連接池能夠使性能最大化,同時還能將資源利用控制在一定的水平之下,如果超過該水平,應用程序將崩潰而不僅僅是變慢。

在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用JDBC直接訪問數據庫中的數據,每一次數據訪問請求都必須經歷建立數據庫連接、打開數據庫、存取數據和關閉數據庫連接等步驟,而連接並打開數據庫是一件既消耗資源又費時的工作,如果頻繁發生這種數據庫操作,系統的性能必然會急劇下降,甚至會導致系統崩潰。數據庫連接池技術是解決這個問題最常用的方法,在許多應用程序服務器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了這項技術,無需自己編程,但是,深入瞭解這項技術是非常必要的。

數據庫連接池技術的思想非常簡單,將數據庫連接作爲對象存儲在一個Vector對象中,一旦數據庫連接建立後,不同的數據庫訪問請求就可以共享這些連接,這樣,通過複用這些已經建立的數據庫連接,可以克服上述缺點,極大地節省系統資源和時間。

數據庫連接池的運行原理

數據庫連接池的主要操作如下:
(1)建立數據庫連接池對象(服務器啓動)。
(2)按照事先指定的參數創建初始數量的數據庫連接(即:空閒連接數)。
(3)對於一個數據庫訪問請求,直接從連接池中得到一個連接。如果數據庫連接池對象中沒有空閒的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的數據庫連接。
(4)存取數據庫。
(5)關閉數據庫,釋放所有數據庫連接(此時的關閉數據庫連接,並非真正關閉,而是將其放入空閒隊列中。如實際空閒連接數大於初始空閒連接數則釋放連接)。
(6)釋放數據庫連接池對象(服務器停止、維護期間,釋放數據庫連接池對象,並釋放所有連接)。

簡單來說:
連接池的工作原理主要由三部分組成,分別爲

  1. 連接池的建立
  2. 連接池中連接的使用管理
  3. 連接池的關閉

連接池的實現模式

  1. 連接池模型
  2. 連接池實現
  3. 連接池使用

連接池需要注意的點

1、併發問題
  爲了使連接管理服務具有最大的通用性,必須考慮多線程環境,即併發問題。這個問題相對比較好解決,因爲各個語言自身提供了對併發管理的支持像java,c#等等,使用synchronized(java)lock(C#)關鍵字即可確保線程是同步的。使用方法可以參考,相關文獻。

2、事務處理
  我們知道,事務具有原子性,此時要求對數據庫的操作符合“ALL-OR-NOTHING”原則,即對於一組SQL語句要麼全做,要麼全不做。
  我們知道當2個線程共用一個連接Connection對象,而且各自都有自己的事務要處理時候,對於連接池是一個很頭疼的問題,因爲即使Connection類提供了相應的事務支持,可是我們仍然不能確定那個數據庫操作是對應那個事務的,這是由於我們有2個線程都在進行事務操作而引起的。爲此我們可以使用每一個事務獨佔一個連接來實現,雖然這種方法有點浪費連接池資源但是可以大大降低事務管理的複雜性。

3、連接池的分配與釋放

連接池的分配與釋放,對系統的性能有很大的影響。合理的分配與釋放,可以提高連接的複用度,從而降低建立新連接的開銷,同時還可以加快用戶的訪問速度。
  對於連接的管理可使用一個List。即把已經創建的連接都放入List中去統一管理。每當用戶請求一個連接時,系統檢查這個List中有沒有可以分配的連接。如果有就把那個最合適的連接分配給他(如何能找到最合適的連接文章將在關鍵議題中指出);如果沒有就拋出一個異常給用戶,List中連接是否可以被分配由一個線程來專門管理捎後我會介紹這個線程的具體實現。

4、連接池的配置與維護
  連接池中到底應該放置多少連接,才能使系統的性能最佳?系統可採取設置最小連接數(minConnection)和最大連接數(maxConnection)等參數來控制連接池中的連接。比方說,最小連接數是系統啓動時連接池所創建的連接數。如果創建過多,則系統啓動就慢,但創建後系統的響應速度會很快;如果創建過少,則系統啓動的很快,響應起來卻慢。這樣,可以在開發時,設置較小的最小連接數,開發起來會快,而在系統實際使用時設置較大的,因爲這樣對訪問客戶來說速度會快些。最大連接數是連接池中允許連接的最大數目,具體設置多少,要看系統的訪問量,可通過軟件需求上得到。
  如何確保連接池中的最小連接數呢?有動態和靜態兩種策略。動態即每隔一定時間就對連接池進行檢測,如果發現連接數量小於最小連接數,則補充相應數量的新連接,以保證連接池的正常運轉。靜態是發現空閒連接不夠時再去檢查。

參考:https://www.cnblogs.com/whb11/p/11315463.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章