使用者每次請求都需要向資料庫獲得鏈結,而資料庫建立連線通常需要消耗相對較大的資源,建立時間也較長。假設**一天10萬訪問量,資料庫伺服器就需要建立10萬次連線,極大的浪費資料庫的資源,並且極易造成資料庫伺服器記憶體溢位、拓機。
所謂的資料庫連線池技術,就是用來分配,管理,釋放資料庫連線的.你也許會問,好像我直接用jdbc也能夠實現這些功能吧.
嗯,你說的沒錯,jdbc確實也可以,但是,你記不記得,我們使用jdbc技術的時候,每次用完了,是不是都會將連線關閉;等到下一次再用的時候,是不是都得將資料庫連線再開啟?
實際上,資料庫鏈結資源是十分寶貴的,我們在小型的專案中還看不出來,在高併發的專案中,你會發現,這樣頻繁的開啟和關閉資料庫鏈結是對伺服器的一種摧殘,十分影響效率.
那麼,資料庫連線池是如何做的呢?
實現思路是這樣的:在每次有訪問的時候,資料庫連線池會給使用者分配乙個資料庫連線,當使用者用完了連線之後,連線池再將連線**,放回乙個連線集合中.
原理就是這樣的,我們來看一下這張圖加深印象
這樣你可能還是不太清楚,而且,資料庫連線池要考慮的東西要比上面說的更複雜
資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用乙個現有的資料庫連線,而不是再重新建立乙個;釋放空閒時間超過最大空閒時間的資料庫連線來避免因為沒有釋放資料庫連線而引起的資料庫連線遺漏。這項技術能明顯提高對資料庫操作的效能。
資料庫連線池在初始化時將建立一定數量的資料庫連線放到連線池中, 這些資料庫連線的數量是由最小資料庫連線數來設定的.無論這些資料庫連線是否被使用,連線池都將一直保證至少擁有這麼多的連線數量.連線池的最大資料庫連線數量限定了這個連線池能占有的最大連線數,當應用程式向連線池請求的連線數超過最大連線數量時,這些請求將被加入到等待佇列中.
資料庫連線池的最小連線數和最大連線數的設定要考慮到以下幾個因素:
最小連線數:是連線池一直保持的資料庫連線,所以如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線資源被浪費.
最大連線數:是連線池能申請的最大連線數,如果資料庫連線請求超過次數,後面的資料庫連線請求將被加入到等待佇列中,這會影響以後的資料庫操作
如果最小連線數與最大連線數相差很大:那麼最先連線請求將會獲利,之後超過最小連線數量的連線請求等價於建立乙個新的資料庫連線.不過,這些大於最小連線數的資料庫連線在使用完不會馬上被釋放,他將被放到連線池中等待重複使用或是空間超時後被釋放.
連線池基本的思想是在系統初始化的時候,將資料庫連線作為物件儲存在記憶體中,當使用者需要訪問資料庫時,並非建立乙個新的連線,而是從連線池中取出乙個已建立的空閒連線物件。使用完畢後,使用者也並非將連線關閉,而是將連線放回連線池中,以供下乙個請求訪問使用。而連線的建立、斷開都由連線池自身來管理。同時,還可以通過設定連線池的引數來控制連線池中的初始連線數、連線的上下限數以及每個連線的最大使用次數、最大空閒時間等等。也可以通過其自身的管理機制來監視資料庫連線的數量、使用情況等。
資料庫連線池 Redis連線池
基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...
資料庫連線池技術 DBCP連線池 配置
最近遇到資料庫連線池配置問題,搜了很多資料對照著進行全域性配置都沒有解決。報的錯誤是 org.apache.tomcat.dbcp.dbcp.sqlnestedexception cannot create jdbc driver of class for connect url jdbc mysq...
資料庫連線池
實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...