[摘要]本文針對(duì)應(yīng)用系統(tǒng)中存在的大量并發(fā)數(shù)據(jù)庫(kù)訪問(wèn)的情況,提出了一個(gè)數(shù)據(jù)庫(kù)連接池方案,并且采用JDBC實(shí)現(xiàn)該方案,用于顯示該方案可以顯著提高數(shù)據(jù)庫(kù)訪問(wèn)的效率,并經(jīng)過(guò)多次試驗(yàn),效果明顯。
[關(guān)鍵詞]Java連接池JDBC設(shè)計(jì)
中圖分類號(hào):TP18 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-8283(2009)04-
1 緒論
Java語(yǔ)言以其面向?qū)ο?、安全性、平臺(tái)無(wú)關(guān)性,以及多線程和分布式等特點(diǎn),成為風(fēng)靡全球的程序設(shè)計(jì)語(yǔ)言?;贘ava的技術(shù)也贏得了越來(lái)越多的企業(yè)級(jí)用戶。在面向企業(yè)的應(yīng)用系統(tǒng)中。數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)是其核心技術(shù)之一。JDBC是SUN公司發(fā)布的Java領(lǐng)域訪問(wèn)數(shù)據(jù)庫(kù)的規(guī)范。執(zhí)行查詢兩個(gè)部分。本文以連接池設(shè)計(jì)模式為理論依據(jù),提出了一個(gè)數(shù)據(jù)庫(kù)連接池方案,其基于JDBC的實(shí)現(xiàn)可以達(dá)到:(1)每一個(gè)數(shù)據(jù)庫(kù)連接得以高效、安全的復(fù)用,避免頻繁的數(shù)據(jù)庫(kù)連接建立、關(guān)閉的開(kāi)銷;(2)限制最大連接數(shù)量;(3)為惡意的連接建立超時(shí)參數(shù)等。
2 連接池模式敘述與設(shè)計(jì)
設(shè)計(jì)模式是近年來(lái)面向?qū)ο筌浖O(shè)計(jì)領(lǐng)域的研究熱點(diǎn)之一。研究設(shè)計(jì)模式的目的在
于,撇開(kāi)具體應(yīng)用環(huán)境中的細(xì)節(jié),在比較高的抽象層次上應(yīng)用已被證明是行之有效的一般方法,解決在軟件設(shè)計(jì)中重復(fù)出現(xiàn)的同類問(wèn)題。
模式具有不同的粒度和抽象水平,但是它們之間存在共性,可以采用一個(gè)模板來(lái)控制對(duì)模式的描述。
3 JAVA數(shù)據(jù)庫(kù)連接池方案的實(shí)現(xiàn)方案中除了有上文連接池模式中成員:
客戶對(duì)象(Client)、連接池對(duì)象(Connection-Pool)、連接實(shí)例對(duì)象(connectlonObjeot)以外,還根據(jù)實(shí)現(xiàn)需要增加了數(shù)據(jù)庫(kù)管理者對(duì)象(DBManager)和計(jì)時(shí)器對(duì)象(Timer)。
4 兩種方案試驗(yàn)對(duì)比與結(jié)論
4.1 理論對(duì)比
采用連接池和不采用連接池兩種方案的
(1)基于Java的應(yīng)用程序(包括JavaApplet/Servlet和Application)是直接通過(guò)數(shù)據(jù)庫(kù)管理器獲取和釋放數(shù)據(jù)庫(kù)連接。這將影響Java應(yīng)用程序的性能。這種影響是由數(shù)器進(jìn)程創(chuàng)建和關(guān)閉那些連接對(duì)象而引起的。應(yīng)用服務(wù)器一般需要花數(shù)秒的時(shí)間來(lái)建立數(shù)據(jù)庫(kù)連接。而且是分別對(duì)每一個(gè)來(lái)自Java應(yīng)用程序的請(qǐng)求進(jìn)行連接建立和關(guān)閉。(2)基于Java的應(yīng)用程序可以透明地共享資源池的多個(gè)連接對(duì)象。在此情況下,因?yàn)檫B接池預(yù)先在啟動(dòng)時(shí)創(chuàng)建連接對(duì)象,所以,在應(yīng)用程序請(qǐng)求使用連接對(duì)象時(shí),不會(huì)引起數(shù)據(jù)庫(kù)資源管理器上的系統(tǒng)開(kāi)銷。
4.2 試驗(yàn)設(shè)計(jì)
使用同一個(gè)Java數(shù)據(jù)庫(kù)應(yīng)用程序,該程序的數(shù)據(jù)庫(kù)訪問(wèn)模塊有兩種選擇:1)有連接池方案;2)無(wú)連接池方案。每一方案中數(shù)據(jù)庫(kù)系統(tǒng)又有三種選擇1)基于SUN Solaris平臺(tái)的Oracle數(shù)據(jù)庫(kù);2)Windows NT平臺(tái)上的Oracle數(shù)據(jù)庫(kù);3)Windows NT平臺(tái)上的MicrosoR Access數(shù)據(jù)。上述兩種選擇一共有六種組合,對(duì)每一組合模擬30個(gè)客戶,客戶每隔3秒鐘訪問(wèn)數(shù)據(jù)庫(kù)一次的情況。記錄50次訪問(wèn)的數(shù)據(jù),對(duì)其取平均值。
4.3 試驗(yàn)結(jié)果和總績(jī)
從試驗(yàn)數(shù)據(jù)可以看出,是否采用連接池方案對(duì)于執(zhí)行查詢的時(shí)間影響不明顯,兩種方案所花的時(shí)間基本相當(dāng)。這說(shuō)明無(wú)論是否采用連接池,在數(shù)據(jù)庫(kù)訪問(wèn)的兩部分時(shí)間中,執(zhí)行查詢所需的時(shí)間,都是不可能顯著降低的。
而兩部分時(shí)間中的另一部分——建立連接的時(shí)間,在采用連接池前后有顯著差別。對(duì)于象Access這樣的小型數(shù)據(jù)庫(kù)(僅用在開(kāi)發(fā)期間的測(cè)試中),其響應(yīng)時(shí)間的差別特別明顯。這說(shuō)明了在Java數(shù)據(jù)庫(kù)程序中。建立連接這部分時(shí)間還是值得斟酌的。即使因?yàn)镺racle專業(yè)級(jí)別的處理能力削弱了這種反差,但是3-4倍的時(shí)間差距,還是能夠成為在大量并發(fā)訪問(wèn)的情況下選擇連接池方案的理由。
需要指出的是,上述的試驗(yàn)結(jié)果并非是在優(yōu)化連接參數(shù)的情況下得到的。如果采用連接池方案的應(yīng)用系統(tǒng)可以根據(jù)系統(tǒng)的硬件、軟件資源,訪問(wèn)量等因素動(dòng)態(tài)配置文件中的參數(shù),例如連接池保持的最少連接數(shù)。每個(gè)連接在關(guān)閉前允許的最大使用次數(shù)等,則可以預(yù)期得到更佳的效果。