1. 程式人生 > >spark 大型項目實戰(七):用戶訪問session分析(七) --數據庫連接池原理

spark 大型項目實戰(七):用戶訪問session分析(七) --數據庫連接池原理

void find csdn sele .net love amp 崩潰 否則

**文章地址:http://www.haha174.top/article/details/257789**
1.談談數據庫連接池的原理
-------------
這次我們采取技術演進的方式來談談數據庫連接池的技術出現過程及其原理,以及當下最流行的開源數據庫連接池jar包。

一.早期我們怎麽進行數據庫操作
技術分享圖片
1.原理:一般來說,java應用程序訪問數據庫的過程是:

  ①裝載數據庫驅動程序;

  ②通過jdbc建立數據庫連接;

  ③訪問數據庫,執行sql語句;

  ④斷開數據庫連接。

2.代碼

       Public void FindAllUsers(){
              //1、裝載sqlserver驅動對象
            Class.forName("com.mysql.jdbc.Driver");
              //2、通過JDBC建立數據庫連接
              Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/test?&useUnicode=true&characterEncoding=utf-8&failOverReadOnly=false", "root", "root");          
              //3、創建狀態
              Statement state =con.createStatement();           
              //4、查詢數據庫並返回結果
              ResultSet result =state.executeQuery("select * from users");           
              //5、輸出查詢結果
              while(result.next()){
                     System.out.println(result.getString("username"));
              }            
              //6、斷開數據庫連接
              result.close();
              state.close();
              con.close();
        }

3.分析

程序開發過程中,存在很多問題:首先,每一次web請求都要建立一次數據庫連接。建立連接是一個費時的活動,每次都得花費0.05s~1s的時間,而且系統還要分配內存資源。這個時間對於一次或幾次數據庫操作,或許感覺不出系統有多大的開銷。可是對於現在的web應用,尤其是大型電子商務網站,同時有幾百人甚至幾千人在線是很正常的事。在這種情況下,頻繁的進行數據庫連接操作勢必占用很多的系統資源,網站的響應速度必定下降,嚴重的甚至會造成服務器的崩潰。不是危言聳聽,這就是制約某些電子商務網站發展的技術瓶頸問題。其次,對於每一次數據庫連接,使用完後都得斷開。否則,如果程序出現異常而未能關閉,將會導致數據庫系統中的內存泄漏,最終將不得不重啟數據庫。還有,這種開發不能控制被創建的連接對象數,系統資源會被毫無顧及的分配出去,如連接過多,也可能導致內存泄漏,服務器崩潰。

上述的用戶查詢案例,如果同時有1000人訪問,就會不斷的有數據庫連接、斷開操作:
技術分享圖片
通過上面的分析,我們可以看出來,“數據庫連接”是一種稀缺的資源,為了保障網站的正常使用,應該對其進行妥善管理。其實我們查詢完數據庫後,如果不關閉連接,而是暫時存放起來,當別人使用時,把這個連接給他們使用。就避免了一次建立數據庫連接和斷開的操作時間消耗。原理如下:
技術分享圖片
二. 技術演進出來的數據庫連接池

由上面的分析可以看出,問題的根源就在於對數據庫連接資源的低效管理。我們知道,對於共享資源,有一個很著名的設計模式:資源池(resource pool)。該模式正是為了解決資源的頻繁分配﹑釋放所造成的問題。為解決上述問題,可以采用數據庫連接池技術。數據庫連接池的基本思想就是為數據庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩沖池”中取出一個,使用完畢之後再放回去。我們可以通過設定連接池最大連接數來防止系統無盡的與數據庫連接。更為重要的是我們可以通過連接池的管理機制監視數據庫的連接的數量﹑使用情況,為系統開發﹑測試及性能調整提供依據。
歡迎關註,更多福利
----
技術分享圖片

spark 大型項目實戰(七):用戶訪問session分析(七) --數據庫連接池原理