資料庫連線池, 沒有說的那麼簡單

2021-09-30 05:01:09 字數 816 閱讀 1593

今天整理硬碟,發現乙個剛畢業那會兒收藏的問題了。記得剛畢業的時候出去面試, 有4次被問到怎麼實現乙個資料庫連線池,可見這個題目當初還是比較吃香的。當時的答案幾乎都是這個樣子的:在程式/server啟動的時候,先申請一定數量的連線放到乙個list中快取起來,當程式需要使用資料庫的時候,list中如果還有連線,則分配給它,若沒有,則再次申請連線,然後分配給程式, 當程式使用完連線之後, 把鏈結歸還到list。現在想想覺得好笑,如果今天還有人問我這個問題,我說不定會反問他,為什麼要連線池,他不一定能脫口而出告訴我原因。

連線池無非就是提高的效率,提高了反映速度。因為資料庫連線是一種tcp/ip連線,建立連線需要花費一定的時間,尤其當資料庫server和web server不再一台機器上的時候,8秒鐘都說不准。如果使用者每次提交請求,都需要花費8秒鐘建立資料庫連線,最後會瘋掉。

至少有兩個問題需要考慮:1 連線池的快取/分配策略。需要考慮最小連線數目,最大連線數目, 管理正在被使用的連線和未使用的連線, 處理因為網路超使等特別原因而無效的連線,什麼時候再次申請連線等等,這些問題實現起來不難,就是繁瑣。 2 connection關閉問題。當程式呼叫connection.close()之後,則這個連線對應的tcp/ip 連線就消失了,所以必須替換掉這種行為。這個問題解決起來也不難,jdk 動態**就可以。pool裡面不要放原生的connection,而放被**之後的, close方法被替換之後的connection包裝類。

在網上找了乙個,稍加修改,注釋明了。

當然,乙個真正的連線池,需要考慮的問題遠遠不止這麼多, 包括statement池,考慮result,事物,併發,分配策略等等。心血來潮, 把dbcp原始碼down下來看了看,很羞愧,沒怎麼明白。

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...

資料庫連線池

實現資料連線池,讓系統有更高有執行效率 using system using system.data using system.data.sqlclient using system.collections using system.threading public class dataaccess...

資料庫連線池

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