最近我作了jsp資料庫的頻繁連線,在此給出資料庫連線池的必要性,對於jsp來說乙個很好的j2ee伺服器是很必要的,jboos,weblogic都是很好的解決方案。
一般情況下,在使用開發基於資料庫的web程式時,傳統的模式基本是按以下步驟:
1. 在主程式(如servlet、beans)中建立資料庫連線。
2. 進行sql操作,取出資料。
3. 斷開資料庫連線。
使用這種模式開發,存在很多問題。首先,我們要為每一次web請求(例如察看某一篇文章的內容)建立一次資料庫連線,對於一次或幾次操作來講,或許你覺察不到系統的開銷,但是,對於web程式來講,即使在某一較短的時間段內,其操作請求數也遠遠不是一兩次,而是數十上百次(想想全世界的網友都有可能在您的網頁上查詢資料),在這種情況下,系統開銷是相當大的。事實上,在乙個基於資料庫的web系統中,建立資料庫連線的操作將是系統中代價最大的操作之一。很多時候,可能您的**速度瓶頸就在於此。
其次,使用傳統的模式,你必須去管理每乙個連線,確保他們能被正確關閉,如果出現程式異常而導致某些連線未能關閉,將導致資料庫系統中的記憶體洩露,最終我們將不得不重啟資料庫。
針對以上問題,我們首先想到可以採用乙個全域性的connection物件,建立後就不關閉,以後程式一直使用它,這樣就不存在每次建立、關閉連線的問題了。但是,同乙個連線使用次數過多,將會導致連線的不穩定,進而會導致web server的頻頻重啟。故而,這種方法也不可取。實際上,我們可以使用jsp資料庫連線池技術來解決上述問題。首先,介紹一下連線池技術的基本原理。顧名思義,連線池最基本的思想就是預先建立一些連線放置於記憶體物件中以備使用:
如圖所示,當程式中需要建立資料庫連線時,只須從記憶體中取乙個來用而不用新建。同樣,使用完畢後,只需放回記憶體即可。而連線的建立、斷開都有連線池自身來管理。同時,我們還可以通過設定連線池的引數來控制連線池中的連線數、每個連線的最大使用次數等等。通過使用連線池,將大大提高程式效率,同時,我們可以通過其自身的管理機制來監視資料庫連線的數量、使用情況等。下面我們以乙個名為connectionpool的連線池為例來看看連線池的實現。先看看connectionpool的基本屬性:
m_connectionpoolsize:連線池中連線數量下限
m_connectionpoolmax:連線池中連線數量上限
m_connectionusecount:乙個連線的最大使用次數
m_connectiontimeout:乙個連線的最長空閒時間
m_maxconnections = -1:同一時間的最大連線數
m_timer:定時器
這些屬性定義了連線池與其中的每個連線的有效狀態值。連線池的自我管理,實際上就是通過定時的對每個連線的狀態、連線的數量進行判斷而進行相應操作。其管理流程如下:
通過上圖,我們可以定義出connectionpool要完成管理所需要的基本介面:
publicclassconnectionpoolimplementstimerlistener
通過這幾個介面,已經可以完成連線池的基本管理。在timeevent()函式中完成連線池的狀態檢驗工作,fillpool()時連線池至少保持最小連線數。因為我們要儲存每乙個連線的狀態,所以還需要乙個資料庫連線物件:
classconnectionobject加入了connectionobject物件後,在connectionpool中操作的應該只是connectionobject,而其他程序需要的只是connectionobject的con屬性,因此我們再加入乙個類,作為其他程序獲得與返回連線的介面:
class conn最後我們的整個jsp資料庫系統總的架構如下:
通過上面的介紹,我們可以看出,連線池技術的關鍵就是其自身的管理機制。以上的jsp資料庫管理流程只是本人一點見解,關鍵是想向大家介紹一種思路,在此基礎上,您可以進一步完善連線池技術為您所用。
資料庫連線池原理
當夜深人靜的時候,我的靈魂漸漸的回到空虛的腦殼中,聽著輕緩的樂曲我忘了所有的現實生活中的不如意,彷彿又回到了天真無邪的少年時代。資料庫連線池類似於乙個有窮佇列,具有 機制 vector vector new vector 當從連線池中申請連線時,如果它的長度為0時,建立連線 conection co...
資料庫連線池實現原理
資料庫連線池的基本原理是在內部物件池中維護一定數量的資料庫連線 並對外暴露資料庫連線獲取和返回方法。如 外部使用者可通過getconnection 方法獲取連線 使用完畢後再通過releaseconnection 方法將連線返回 注意此時連線並沒關閉 而是由連線池管理器 並為下一次使用做好準備。資料...
資料庫連線池 Redis連線池
基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...