999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

連接池訪問數據庫的研究與應用

2017-11-18 16:13:05戴長秀
計算機時代 2017年11期

戴長秀

摘 要: 應用程序用JDBC訪問數據庫需要頻繁的建立連接和關閉連接,由于數據庫連接數的限制,當用戶數、連接數達到一定程度時,用JDBC訪問數據庫的速度將會明顯下降,甚至需要重啟數據庫系統,這極大地降低了數據庫應用系統的性能。連接池較好地解決了上述問題,避免了連接數增加引起的數據庫性能瓶頸問題。文章介紹了連接池的靜態、動態創建,引用記數法分配連接等實現原理,對連接池的配置進行了論述。實踐表明,連接池可以很好地提高數據庫應用系統的整體性能。

關鍵詞: 連接池; 靜態; 動態; 引用記數

中圖分類號:TP311.52 文獻標志碼:A 文章編號:1006-8228(2017)11-20-03

Research and application of connection pool to access database

Dai Changxiu

(Department of Information Science and Technology, Guangdong University of Foreign Studies South China Business College, Guangdong, Guangzhou 510545, China)

Abstract: The applications using JDBC to access database need to establish and close the connections frequently, because of the limitation of database connection, when the number of users, the number of connections increase to a certain extent, the speed of accessing database with JDBC will be decreased obviously, even need to restart the database system, which greatly reduces the performance of database application system. The connection pool solves the above problem well and avoids the bottleneck of database performance caused by the increase of the connection number. This paper introduces the principle of the static and dynamic creation of connection pool, and the principle of distributing connections with reference counting method, and discusses the configuration of connection pool. The practice shows that the connection pool can improve the overall performance of database application system.

Key words: connection pool; static; dynamic; reference counting

0 引言

Web應用程序最常用的數據管理方式就是使用關系數據庫,往往都是用數據庫存儲的信息動態生成Web頁面[1]。在基于JDBC訪問數據庫方式中,每個用戶在請求訪問數據庫前都必須先建立連接,建立連接將會消耗系統一定資源,延長訪問數據庫的時間。當然,如果是單個用戶請求訪問,這個延時是比較小的,用戶體會不到。但是,如果是批量用戶、批量請求,這個延時將會急速劇增。同時還可能出現由于連接的不及時關閉而導致數據庫內存泄露,數據庫系統重啟,從而系統無法響應用戶請求問題。眾所周知,每種數據庫在同一時刻都有允許的最大連接數,隨著流量、用戶的增加,數據庫連接數達到一定數量時,數據庫的性能就會急劇下降,甚至崩潰。

數據庫連接池技術很好的解決了上述問題,連接池通過預先建立一定數量的數據庫連接為應用程序提供連接。當應用程序訪問數據庫時,應用程序就可以從連接池中取出一個事先建立好的數據庫連接來訪問數據庫,從而免去每次訪問數據庫時建立數據庫連接的開銷,同時也可以減少數據庫連接和斷開時造成的程序錯誤[2]。數據庫連接池技術不僅節省了數據庫建立連接的時間,而且通過池化管理機制,可以有效地使用和調度連接池中的連接,從而很好地解決數據庫連接數量限制問題。

1 連接池的實現原理

服務器在啟動時創建連接池,同時建立一定數量的數據庫連接。當用戶請求數據庫連接時,服務器為其分配連接。當用戶請求數量超出了已建立好的數據庫連接數目時,服務器為其創建新的數據庫連接或者復用已分配出去的數據庫連接或者處于等待狀態。通常情況下,使用連接池來訪問數據庫包含以下兩個步驟:

⑴ 創建連接池;

⑵ 分配、釋放連接。

1.1 創建連接池

創建連接池的方法有靜態和動態之分,所謂靜態是指,池中的連接是系統初始化時已創建好的,并且不能隨意的關閉,這樣就可以避免因連接隨意建立、關閉而造成的系統開銷[3]。在系統初始化時,根據配置文件中的參數創建數據庫連接并放置在連接池中,以后應用程序使用數據庫連接時就從該連接池中獲取,連接池相對于應用程序來說是惟一的,數據庫連接數也是固定的。所謂的動態是指可以動態的加載、修改、刪除連接池,可以為不同類型的數據庫同時創建連接池,可以靈活地配置連接池參數。動態方法解決了靜態方法中靜態加載連接池的局限性,解決了連接池不能適時增刪改,配置參數不能根據應用變化靈活調整的問題[4]。endprint

1.2 分配、釋放連接

創建好連接池后,需要提供一套有效的分配連接機制以保證數據庫連接的有效使用。當應用程序請求一個數據庫連接時,連接池通常以連接建立時間長短為分配原則為該請求分配一個建立時間最長的空閑的連接,此處的空閑是指沒有被分配出去的連接,如果連接池中沒有空閑連接,則檢查當前連接池中連接數是否達到設定的最大值,如果沒有達到就新建一個連接,如果已達到連接池中所允許的最大連接數,則該請求等待一定時間,如果在設定的等待時間內還沒有數據庫連接被釋放出來,則返回空值。

連接池中最小連接數的檢測有動態和靜態兩種方法,動態方法是指每隔一定時間系統自行檢測連接池中連接數,如果發現數據庫連接數低于最小連接數的設定值,則補充相應數量的新連接,從而保證連接池的正常運轉。靜態方法是指發現空閑連接不夠使用時系統再去檢測數據庫連接數并與設定的最小連接數進行對比。

在分配數據連接時,除了使用空閑連接外,也可以復用正在使用的數據庫連接,復用正在使用的數據庫連接通常使用Reference Counting(引用記數)方法。該方法會為每一個數據庫連接保留一個引用記數值,用來記錄該連接的使用者的個數。具體操作是采用兩級連接池,一個空閑池用于存放目前還沒分配出去使用的的連接,另一個使用池存放目前已被分配出去使用的連接,并且為每個數據庫連接設置相應的引用記數值。當所有的數據庫連接都已分配出去使用時則選擇引用記數值較小的數據庫連接進行復用,這樣可以避免隨意選擇數據庫連接進行復用,達到數據庫連接可管理的目的[5]。

2 靜態連接池的配置

連接池應建立多少數據庫連接數,才能使系統的性能處于最佳狀態,發揮最好的性能,這個值的設置需要參考系統的用戶數,需要開發人員經過反復測試,最后才能找到最佳的設置值。

2.1 配置參數介紹

連接池的配置方法有很多,可以在Tomcat下配置,也可以使用JSP的框架如Struts、Spring和Hibernate,還可以使用開源提供的連接池組件。在此,只針對Tomcat下連接池的配置進行介紹。JDBC2.0提供了javax.sql.DataSourse接口負責數據庫的建立,在應用時無需編寫數據庫連接代碼,就可以直接從數據源中獲得數據庫連接。在DataSourse接口中預先建立好數據庫連接并放置在連接池中,當用戶請求訪問數據庫時,應用程序直接從連接池中取出空閑的連接,訪問結束后,再將連接返回給連接池。Tomcat服務器正是通過DataSourse接口獲取數據庫連接,雖然不能為DataSourse接口創建實例,但是可以通過Java命名和目錄接口(JNDI)來獲取DataSourse接口的引用,在配置數據源時需要使用的有關參數及含義如下。

Name:設置數據源的JNDI名。

Type:設置數據源的類型。

Auth:設置數據源的管理者,有兩個可選值Container和Application,Container表示由容器來創建和管理數據源,Application表示由Web應用來創建和管理數據源。

driverClassName:設置連接數據庫的JDBC驅動程序。

url:設置連接數據庫的路徑。

username:設置連接數據庫的用戶名。

password:設置連接數據庫的密碼。

maxActive:設置連接池中處于活動狀態的數據庫連接的最大數目,0表示不受限制。

maxIdle:設置連接池中處于空閑狀態的數據庫連接的最大數目,0表示不受限制。

maxWait:設置當連接池中沒有處于空閑狀態的連接時,請求數據庫連接的請求的最長等待時間(單位為ms),如果超出該時間將拋出異常,-1表示無限期等待。

2.2 數據源的配置

以SQL Server 2008為例,介紹在Tomcat 8.0下數據庫連接池的配置。

⑴ 復制數據庫驅動包。將SQL Server數據庫的JDBC驅動包sqljdbc.jar或者sqljdbc4.jar復制到Tomcat安裝路徑下的lib文件夾中。

⑵ 配置數據源。配置數據源時,可以將其配置到Tomcat安裝目錄下的conf\server.xml文件中,也可以將其配置到Web工程目錄下的META-INF\context.xml文件中,建議采用后者,因為這樣配置的數據源更有針對性,配置數據源的代碼如下:

auth="Container"

type="javax.sql.DataSource"

username="sa"

password="123456"

driverClassName="com.microsoft.sqlserver.jdbc

.SQLServerDriver"

url="="jdbc:sqlserver://127.0.0.1:1433;

DatabaseName=db_database"

maxActive="6"

maxIdle="2"/>

3 連接池訪問數據庫的設計實現

創建名為JDBConnection.java類文件,在其構造方法中獲取DataSourse接口的引用。編寫DBTableDisplay.jsp文件,顯示數據庫表中信息。

JDBConnection類文件核心代碼如下:

……endprint

public class JDBConnection {

……

private Context ctx=null;

private Connection conn=null;

private DataSourse ds;

……

public JDBConnection() {

//類的構造方法,為Connection對象賦值

try {

ctx=new InitialContext();

ds=(DataSource)ctx.lookup("java:comp/env/jdbc/my_db"); //獲取連接池DataSource的引用

conn=ds.getConnection(); //得到連接

} catch(Exception e){……}

……

}

public Connection getConnection() {

//獲取Connection連接對象

return conn;

}

public ResultSet getResultSet(String sql) {

//獲取ResultSet記錄集對象

ResultSet rs;

try {

Statement stmt=conn.createStatement();

rs=stmt.executeQuery(sql);

} catch(Exception e){……}

……

return rs

}

……

}

在DBTableDisplay.jsp文件中創建JDBConnection實例,顯示數據庫表中的數據的核心代碼如下:

……

public JDBConnection DBConnection=null;

public ResultSet rs=null;

public String sql=null;

……

DBConnection=new JDBConnection();

rs=DBConnection.getResultSet (sql);

while(rs.next() {

//對數據庫表中的數據進行輸出顯示

}

……

4 結束語

盡管創建一個新的數據庫連接所耗費的時間主要取決于網絡的速度,以及應用程序與數據庫存服務器的網絡距離,然而這是一個比較耗時的過程。目前數據庫連接池技術已經成為提高Java訪問數據庫效率的首選方案之一。本文針對傳統訪問數據庫方式的不足,分析了數據庫連接池技術的實現原理,并對連接池技術加以實現至應用。采用數據庫連接池后,數據庫請求可以直接通過連接池獲得滿足,不需要為該請求建立連接以及認證,從而為數據庫的訪問贏得了時間。盡管連接池中可能存在多個未被使用的數據庫連接,這在一定程度上會浪費系統資源,但是,開發人員通過反復試驗及測試,可以找到最佳的參數值從而將資源浪費減至最低??傊褂眠B接池技術可以克服傳統訪問方式的不足,明顯地提高數據庫應用系統的整體性能。

參考文獻(References):

[1] 張玉林.用連接池提高Servlet訪問數據庫的效率[J].軟件技

術,2006.20:72-75

[2] 徐全生,齊祥玲.數據庫連接池在考試系統中的應用[J].沈陽

工業大學學報,2007.5:582-584

[3] 劉繼華.一種基于JDBC的數據庫連接池的設計與實現[J].計

算機工程與應用,2003.7:183-185

[4] 汪蔚,基于Java的數據庫連接池設計與優化[J].交通科技與

經濟,2009.4:108-109

[5] 劉菲、游達章,基于Java的數據庫連接池的設計與優化[J].微

型電腦應用,2008.24:7-9endprint

主站蜘蛛池模板: 国产91丝袜| 亚洲欧洲免费视频| 久久人与动人物A级毛片| 91久久夜色精品国产网站| 日本a∨在线观看| 色婷婷视频在线| 午夜小视频在线| 国产精品亚洲欧美日韩久久| 久久国产拍爱| 亚洲天堂视频在线免费观看| 影音先锋丝袜制服| 久热re国产手机在线观看| 91美女视频在线| 日韩精品亚洲人旧成在线| 中国成人在线视频| 欧美精品1区| 亚洲男人的天堂在线观看| aa级毛片毛片免费观看久| 亚洲第一极品精品无码| 日韩毛片基地| 亚洲中文无码av永久伊人| 性色生活片在线观看| 任我操在线视频| 人妻91无码色偷偷色噜噜噜| 在线精品亚洲一区二区古装| 国产91熟女高潮一区二区| 福利一区三区| 久久久噜噜噜久久中文字幕色伊伊| 成人精品区| 国产午夜无码专区喷水| 国产人人射| 亚洲一区国色天香| 国产精品久久久久婷婷五月| 国产又大又粗又猛又爽的视频| 久久亚洲国产视频| 青青草综合网| 欧美亚洲欧美区| 中文字幕乱妇无码AV在线| 国产欧美日本在线观看| 国产成人三级| 久久先锋资源| 久久网欧美| 精品一区二区久久久久网站| 91久久青青草原精品国产| 国产精品亚洲va在线观看| 精品久久蜜桃| 在线免费观看a视频| 精品自拍视频在线观看| 99久久性生片| 国产麻豆永久视频| 久操线在视频在线观看| 日韩第一页在线| 91青青草视频在线观看的| 极品私人尤物在线精品首页 | 在线免费无码视频| 澳门av无码| 女同国产精品一区二区| 伊人久久精品亚洲午夜| 亚洲黄网视频| 色综合中文字幕| 日韩 欧美 小说 综合网 另类| 国产主播福利在线观看| 欧美天堂久久| 97视频精品全国在线观看| 91久久国产热精品免费| 青青极品在线| 亚洲天堂首页| 日韩欧美一区在线观看| 国产99久久亚洲综合精品西瓜tv| 无码又爽又刺激的高潮视频| 国产成人喷潮在线观看| 在线不卡免费视频| 国产在线观看一区二区三区| 毛片网站在线看| 少妇人妻无码首页| 欧美日韩精品一区二区在线线| 欧美国产综合色视频| 狠狠色狠狠色综合久久第一次| 找国产毛片看| 1024国产在线| 亚洲国模精品一区| 成人在线观看一区|