專利名稱:一種基于雙連接池的數(shù)據(jù)庫(kù)連接方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫(kù)設(shè)計(jì)領(lǐng)域技術(shù)中的數(shù)據(jù)庫(kù)連接技術(shù),特別涉及應(yīng)用于一切涉及到操作數(shù)據(jù)庫(kù)的產(chǎn)品中的數(shù)據(jù)庫(kù)連接技術(shù)。
背景技術(shù):
數(shù)據(jù)庫(kù)連接是一種關(guān)鍵的有限的昂貴的資源,這一點(diǎn)在多用戶的網(wǎng)頁(yè)應(yīng)用程序中體現(xiàn)得尤為突出。當(dāng)并發(fā)用戶較大時(shí),許多相同的連接將反復(fù)地被打開和關(guān)閉,浪費(fèi)了數(shù)據(jù)庫(kù)大量的系統(tǒng)資源,降低了訪問(wèn)效率。對(duì)數(shù)據(jù)庫(kù)連接的管理能顯著影響到整個(gè)應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標(biāo)。數(shù)據(jù)庫(kù)連接池正是針對(duì)這個(gè)問(wèn)題提出來(lái)的。數(shù)據(jù)庫(kù)連接池負(fù)責(zé)分配、管理和釋放數(shù)據(jù)庫(kù)連接,它允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而再不是重新建立一個(gè);釋放空閑時(shí)間超過(guò)最大空閑時(shí)間的數(shù)據(jù)庫(kù)連接來(lái)避免因?yàn)闆](méi)有釋放數(shù)據(jù)庫(kù)連接而引起的數(shù)據(jù)庫(kù)連接遺漏。這項(xiàng)技術(shù)能明顯提高對(duì)數(shù)據(jù)庫(kù)操作的性能。在傳統(tǒng)的數(shù)據(jù)庫(kù)連接模式中,客戶端程序在啟動(dòng)時(shí)打開數(shù)據(jù)庫(kù)連接,在退出程序時(shí)關(guān)閉數(shù)據(jù)庫(kù)連接。這樣,在整個(gè)程序運(yùn)行中,每個(gè)客戶端始終占用一個(gè)數(shù)據(jù)庫(kù)連接,即使在大量沒(méi)有數(shù)據(jù)庫(kù)操作的空閑時(shí)間,如用戶輸入數(shù)據(jù)時(shí),從而造成數(shù)據(jù)庫(kù)連接的使用效率低下。在數(shù)據(jù)庫(kù)連接通過(guò)連接池管理的模式中,只有當(dāng)用戶真正需要進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),才從連接池申請(qǐng)一個(gè)連接,數(shù)據(jù)庫(kù)操作完畢,連接立即釋放到連接池中,以供其他用戶使用。這樣,不僅大大提高了數(shù)據(jù)庫(kù)連接的使用效率,使得大量用戶可以共享較少的數(shù)據(jù)庫(kù)連接,而且省去了建立連接的時(shí)間。
發(fā)明內(nèi)容
本發(fā)明針對(duì)Web應(yīng)用中大并發(fā)用戶時(shí),數(shù)據(jù)庫(kù)大量的系統(tǒng)資源被浪費(fèi),訪問(wèn)效率低下的問(wèn)題,提供了一種基于雙連接池的數(shù)據(jù)庫(kù)連接方法。本發(fā)明的目的是允許應(yīng)用程序重復(fù)使用一個(gè)現(xiàn)有的數(shù)據(jù)庫(kù)連接,而不是重新建立一個(gè),從而對(duì)于數(shù)據(jù)庫(kù)操作的性能大大提高,進(jìn)而改善了整個(gè)應(yīng)用程序的伸縮性和健壯性。為此,本發(fā)明公開了一種基于雙連接池的數(shù)據(jù)庫(kù)連接方法。所述基于雙連接池的數(shù)據(jù)庫(kù)連接方法步驟如下步驟一、創(chuàng)建包含有最小連接數(shù)量的多個(gè)數(shù)據(jù)庫(kù)連接,將這些數(shù)據(jù)庫(kù)連接排隊(duì)放入可用連接池中;步驟二、當(dāng)某一用戶進(jìn)程需要進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),從可用連接池申請(qǐng)數(shù)據(jù)庫(kù)連接, 將可用連接池中位于隊(duì)首的數(shù)據(jù)庫(kù)連接返回給該用戶進(jìn)程,并將該數(shù)據(jù)庫(kù)連接從可用連接池的隊(duì)列中刪除;步驟三、當(dāng)需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程超過(guò)最小連接數(shù)量時(shí),再創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接供用戶進(jìn)程使用,直到所創(chuàng)建的數(shù)據(jù)庫(kù)連接和可用連接池中原有的最小連接數(shù)量之和達(dá)到最大連接數(shù)量;步驟四、達(dá)到最大連接數(shù)量后,將需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程放入等待進(jìn)程池的隊(duì)尾。優(yōu)選的是,所述的基于雙連接池的數(shù)據(jù)庫(kù)連接方法中,當(dāng)有用戶進(jìn)程完成數(shù)據(jù)庫(kù)操作時(shí),判斷等待進(jìn)程池的隊(duì)列是否為空,若為空,則將該用戶進(jìn)程使用過(guò)的數(shù)據(jù)庫(kù)連接插入可用連接池的隊(duì)尾;若不為空,則將該用戶進(jìn)程使用過(guò)的數(shù)據(jù)庫(kù)連接傳給位于等待進(jìn)程池的隊(duì)首的用戶進(jìn)程使用。優(yōu)選的是,所述的基于雙連接池的數(shù)據(jù)庫(kù)連接方法中,當(dāng)完成數(shù)據(jù)庫(kù)操作的用戶進(jìn)程的數(shù)量增多至使得數(shù)據(jù)庫(kù)連接數(shù)量持續(xù)下降,直到降低至已連接數(shù)閥值時(shí),將可用連接池內(nèi)的數(shù)據(jù)庫(kù)連接數(shù)量重新設(shè)定為最小連接數(shù)量。優(yōu)選的是,所述的基于雙連接池的數(shù)據(jù)庫(kù)連接方法中,所述已連接數(shù)閥值為最小連接數(shù)量的二分之一。本發(fā)明的有益效果是當(dāng)無(wú)法獲取連接時(shí)不再重試連接,而是等到等待進(jìn)程池中隊(duì)首進(jìn)程獲取到數(shù)據(jù)庫(kù)連接后才繼續(xù)執(zhí)行。而單獨(dú)采用連接池的方式會(huì)在無(wú)法獲取連接時(shí)不斷重試,直至有連接釋放,這樣進(jìn)程仍會(huì)占用一些寶貴的系統(tǒng)資源,降低數(shù)據(jù)庫(kù)的效率。 因此,雙池結(jié)構(gòu)能更有效地管理連接資源,充分發(fā)揮數(shù)據(jù)庫(kù)的性能。
附圖1為該方法的流程圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步說(shuō)明,以使本領(lǐng)域普通技術(shù)人員參照本說(shuō)明書后能夠據(jù)以實(shí)施。如圖1所示,本發(fā)明的一種基于雙連接池的數(shù)據(jù)庫(kù)連接方法,包括如下步驟步驟一、當(dāng)應(yīng)用服務(wù)器啟動(dòng)時(shí),立即創(chuàng)建包含有最小連接數(shù)量的多個(gè)數(shù)據(jù)庫(kù)連接, 將這些數(shù)據(jù)庫(kù)連接排隊(duì)放入可用連接池中,無(wú)論這些數(shù)據(jù)庫(kù)連接是否使用,它們都將一直存在,直到應(yīng)用服務(wù)關(guān)閉;步驟二、當(dāng)某一用戶進(jìn)程需要進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),從可用連接池申請(qǐng)數(shù)據(jù)庫(kù)連接, 首先判斷可用連接池里是否為空,若當(dāng)前的連接池不為空,將可用連接池中位于隊(duì)首的數(shù)據(jù)庫(kù)連接返回給該用戶進(jìn)程,并將該數(shù)據(jù)庫(kù)連接從可用連接池的隊(duì)列中刪除;步驟三、若當(dāng)前可用連接池為空當(dāng),說(shuō)明目前無(wú)可用的數(shù)據(jù)庫(kù)連接,那么系統(tǒng)將進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程數(shù)量判斷。當(dāng)需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程超過(guò)最小連接數(shù)量,未達(dá)到所創(chuàng)建的數(shù)據(jù)庫(kù)連接的最大連接數(shù)量時(shí),再創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接供用戶進(jìn)程使用;步驟四、當(dāng)需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程等于或超過(guò)所創(chuàng)建的數(shù)據(jù)庫(kù)連接的最大連接數(shù)量時(shí),將需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程放入等待進(jìn)程池的隊(duì)尾。步驟五、當(dāng)有用戶進(jìn)程完成數(shù)據(jù)庫(kù)操作時(shí),判斷等待進(jìn)程池的隊(duì)列是否為空,若為空,則將該用戶進(jìn)程使用過(guò)的數(shù)據(jù)庫(kù)連接插入可用連接池的隊(duì)尾;若不為空,則將該用戶進(jìn)程使用過(guò)的數(shù)據(jù)庫(kù)連接傳給位于等待進(jìn)程池的隊(duì)首的用戶進(jìn)程使用。當(dāng)完成數(shù)據(jù)庫(kù)操作的用戶進(jìn)程的數(shù)量增多至使得數(shù)據(jù)庫(kù)連接數(shù)量持續(xù)下降,直到降低至已連接數(shù)閥值時(shí),將可用連接池內(nèi)的數(shù)據(jù)庫(kù)連接數(shù)量重新設(shè)定為最小連接數(shù)量。另一種實(shí)現(xiàn)形式是步驟一、當(dāng)應(yīng)用服務(wù)啟動(dòng)時(shí),即創(chuàng)建多個(gè)數(shù)據(jù)庫(kù)連接,放入可用連接池中,其數(shù)量等于最小連接數(shù),無(wú)論這些數(shù)據(jù)庫(kù)連接是否使用,它們將一直存在直到應(yīng)用服務(wù)關(guān)閉。等待進(jìn)程池為空。步驟二、當(dāng)某一用戶進(jìn)程需要進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),需從可用連接池申請(qǐng)數(shù)據(jù)庫(kù)連接。首先判斷可用連接池是否為空,所謂的可用連接池是預(yù)先設(shè)定一定數(shù)據(jù)的連接存放在連接池里面供后面的請(qǐng)求使用。若可用連接池的隊(duì)列不為空,則將可用連接池隊(duì)頭的數(shù)據(jù)庫(kù)連接返回給用戶進(jìn)程,并將該數(shù)據(jù)庫(kù)連接從可用連接池的隊(duì)列中刪除。若可用連接池的隊(duì)列為空,分兩種情況,一種情況是總連接數(shù)小于最大連接數(shù),則再創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接供用戶進(jìn)程使用,總連接數(shù)加一;另一種情況是總連接數(shù)等于或大于最大連接數(shù),說(shuō)明連接池不能提供連接給當(dāng)前的請(qǐng)求,此時(shí)將當(dāng)前請(qǐng)求進(jìn)程放入到等待進(jìn)程池中進(jìn)行等待,則用戶進(jìn)程插入等待進(jìn)程池的隊(duì)尾。步驟三、在一個(gè)進(jìn)程進(jìn)行數(shù)據(jù)庫(kù)操作結(jié)束后,當(dāng)前使用的連接將釋放掉,判斷等待進(jìn)程池的隊(duì)列是否為空,若為空,則將該用戶進(jìn)程使用的數(shù)據(jù)庫(kù)連接插入可用連接池的隊(duì)尾;若不為空,則將該用戶進(jìn)程使用的數(shù)據(jù)庫(kù)連接傳給等待進(jìn)程池的隊(duì)頭進(jìn)程使用。盡管本發(fā)明的實(shí)施方案已公開如上,但其并不僅僅限于說(shuō)明書和實(shí)施方式中所列運(yùn)用,它完全可以被適用于各種適合本發(fā)明的領(lǐng)域,對(duì)于熟悉本領(lǐng)域的人員而言,可容易地實(shí)現(xiàn)另外的修改,因此在不背離權(quán)利要求及等同范圍所限定的一般概念下,本發(fā)明并不限于特定的細(xì)節(jié)和這里示出與描述的圖例。
權(quán)利要求
1.一種基于雙連接池的數(shù)據(jù)庫(kù)連接方法,其特征在于,包括以下步驟步驟一、創(chuàng)建包含有最小連接數(shù)量的多個(gè)數(shù)據(jù)庫(kù)連接,將這些數(shù)據(jù)庫(kù)連接排隊(duì)放入可用連接池中;步驟二、當(dāng)某一用戶進(jìn)程需要進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),從可用連接池申請(qǐng)數(shù)據(jù)庫(kù)連接,將可用連接池中位于隊(duì)首的數(shù)據(jù)庫(kù)連接返回給該用戶進(jìn)程,并將該數(shù)據(jù)庫(kù)連接從可用連接池的隊(duì)列中刪除;步驟三、當(dāng)需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程超過(guò)最小連接數(shù)量時(shí),再創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接供用戶進(jìn)程使用,直到所創(chuàng)建的數(shù)據(jù)庫(kù)連接和可用連接池中原有的最小連接數(shù)量之和達(dá)到最大連接數(shù)量;步驟四、達(dá)到最大連接數(shù)量后,將需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程放入等待進(jìn)程池的隊(duì)尾。
2.如權(quán)利要求1所述的基于雙連接池的數(shù)據(jù)庫(kù)連接方法,其特征在于,當(dāng)有用戶進(jìn)程完成數(shù)據(jù)庫(kù)操作時(shí),判斷等待進(jìn)程池的隊(duì)列是否為空,若為空,則將該用戶進(jìn)程使用過(guò)的數(shù)據(jù)庫(kù)連接插入可用連接池的隊(duì)尾;若不為空,則將該用戶進(jìn)程使用過(guò)的數(shù)據(jù)庫(kù)連接傳給位于等待進(jìn)程池的隊(duì)首的用戶進(jìn)程使用。
3.如權(quán)利要求1所述的基于雙連接池的數(shù)據(jù)庫(kù)連接方法,其特征在于,當(dāng)完成數(shù)據(jù)庫(kù)操作的用戶進(jìn)程的數(shù)量增多至使得數(shù)據(jù)庫(kù)連接數(shù)量持續(xù)下降,直到降低至已連接數(shù)閥值時(shí),將可用連接池內(nèi)的數(shù)據(jù)庫(kù)連接數(shù)量重新設(shè)定為最小連接數(shù)量。
4.如權(quán)利要求1所述的基于雙連接池的數(shù)據(jù)庫(kù)連接方法,其特征在于,所述已連接數(shù)閥值為最小連接數(shù)量的二分之一。
全文摘要
本發(fā)明公開了一種基于雙連接池的數(shù)據(jù)庫(kù)連接方法。包括步驟先創(chuàng)建包含有最小連接數(shù)量的多個(gè)數(shù)據(jù)庫(kù)連接放入可用連接池中。當(dāng)某一用戶進(jìn)程需要進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),從可用連接池申請(qǐng)數(shù)據(jù)庫(kù)連接,當(dāng)需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程超過(guò)最小連接數(shù)量時(shí),再創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接供用戶進(jìn)程使用,直到所創(chuàng)建的數(shù)據(jù)庫(kù)連接和可用連接池中原有的最小連接數(shù)量之和達(dá)到最大連接數(shù)量。達(dá)到最大連接數(shù)量后,將需要進(jìn)行數(shù)據(jù)庫(kù)操作的用戶進(jìn)程放入等待進(jìn)程池的隊(duì)尾。在一個(gè)進(jìn)程進(jìn)行數(shù)據(jù)庫(kù)操作結(jié)束后,當(dāng)前使用的連接將釋放掉,如果等待進(jìn)程池不為空,那么將釋放的連接給等待進(jìn)程池的對(duì)頭,激活等待進(jìn)程池的對(duì)頭進(jìn)行數(shù)據(jù)庫(kù)操作,如果等待進(jìn)程池為空,那么當(dāng)前被釋放的連接直接放入可用進(jìn)程池供下一個(gè)應(yīng)用請(qǐng)求使用。本發(fā)明提供了一套有效的方法來(lái)使數(shù)據(jù)庫(kù)操作的性能大大提高,進(jìn)而改善了整個(gè)應(yīng)用程序的伸縮性和健壯性。
文檔編號(hào)G06F17/30GK102346767SQ20111027881
公開日2012年2月8日 申請(qǐng)日期2011年9月19日 優(yōu)先權(quán)日2011年9月19日
發(fā)明者劉天倫, 施霖, 李躍海 申請(qǐng)人:北京金和軟件股份有限公司