本發(fā)明涉及數(shù)據(jù)庫管理技術領域,尤其涉及一種分布式數(shù)據(jù)庫連接方法和裝置。
背景技術:
傳統(tǒng)的數(shù)據(jù)庫連接池技術有效的降低了數(shù)據(jù)庫系統(tǒng)資源的消耗,同時提高了數(shù)據(jù)庫的訪問效率。但是隨著互聯(lián)網(wǎng)技術的快速發(fā)展,數(shù)據(jù)庫的訪問量和數(shù)據(jù)量有了爆發(fā)式的增長,導致數(shù)據(jù)庫無法滿足需求,基于開源數(shù)據(jù)庫研發(fā)的分布式數(shù)據(jù)庫可以有效的解決該問題,通過分布在網(wǎng)絡中的一組數(shù)據(jù)庫來分散數(shù)據(jù)庫的訪問和數(shù)據(jù)存儲。
為了同時兼顧早期盡量少的數(shù)據(jù)庫服務器的投入,以及將來數(shù)據(jù)庫訪問量進一步提高后降低數(shù)據(jù)庫拆分的成本和更為平滑的升級,大量分布式數(shù)據(jù)庫都采用了一個數(shù)據(jù)庫實例多個數(shù)據(jù)庫的過度架構(gòu),例如,128個數(shù)據(jù)庫分布在16個Mysql數(shù)據(jù)庫實例上,每個數(shù)據(jù)庫實例有8個數(shù)據(jù)庫。使用傳統(tǒng)的數(shù)據(jù)庫連接方法將會存在如下問題:
一方面,每個數(shù)據(jù)庫對應一個連接池,假如每個連接池的最大連接數(shù)設置為20個,但是當同一個數(shù)據(jù)庫實例的8個數(shù)據(jù)庫中存在冷熱數(shù)據(jù)導致不同時刻訪問量差別較大時,訪問量大的連接池連接不夠用而訪問量少的連接池卻存在空閑連接而無法被復用,導致資源浪費。
另一方面,每個連接池都有一些固定的后臺線程做空閑連接檢查、新建連接、關閉連接等維護連接的操作,假如每個連接池有3個線程,那么每個應用程序?qū)⒂?28*3=384個線程,而大部分維護連接的操作只需要少量線程即可完成,導致連接池浪費了大量應用程序的系統(tǒng)資源,降低了應用程序的服務能力。
技術實現(xiàn)要素:
本發(fā)明的主要目的在于提供一種分布式數(shù)據(jù)庫連接方法和裝置,旨在減少連接池的線程數(shù)量,節(jié)省系統(tǒng)資源。
為實現(xiàn)上述目的,本發(fā)明提供了一種分布式數(shù)據(jù)庫連接方法,包括:
將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享;
設定所述連接池的指定線程執(zhí)行空閑連接檢查的操作,當接收到客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述請求及所述空閑連接檢查的操作結(jié)果返回一個空閑連接給所述客戶端。
可選地,所述請求包括目標數(shù)據(jù)庫名稱及數(shù)據(jù)庫實例名稱,所述當接收到客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述請求及所述空閑連接檢查的操作結(jié)果返回一個空閑連接給所述客戶端包括:
當接收到客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述數(shù)據(jù)庫實例名稱查找目標數(shù)據(jù)庫實例,并根據(jù)所述目標數(shù)據(jù)庫名稱在所述目標數(shù)據(jù)庫實例中獲取目標數(shù)據(jù)庫;
判斷所述目標數(shù)據(jù)庫是否存在空閑連接;
若所述目標數(shù)據(jù)庫存在空閑連接,則返回一個空閑連接給所述客戶端。
可選地,所述判斷所述目標數(shù)據(jù)庫是否存在空閑連接之后包括:
當所述目標數(shù)據(jù)庫不存在空閑連接時,偵測與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫是否存在空閑連接;
若是,則返回一個空閑連接給所述客戶端,并將所述空閑連接對應的所述數(shù)據(jù)庫的名稱,修改為所述目標數(shù)據(jù)庫的名稱。
可選地,所述偵測與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫是否存在空閑連接之后包括:
當與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫不存在空閑連接時,設定所述連接池的固定線程執(zhí)行異步建立連接操作,根據(jù)所述異步建立連接操作在所述目標數(shù)據(jù)庫下創(chuàng)建一個新的連接,并將所述新的連接返回給所述客戶端。
可選地,所述分布式數(shù)據(jù)庫連接方法還包括:
當所述客戶端根據(jù)得到目標數(shù)據(jù)庫的指定連接完成執(zhí)行數(shù)據(jù)庫操作后,控制所述客戶端將所述指定連接歸還至所述連接池,并將所述指定連的接狀態(tài)設置為空閑連接狀態(tài)。
此外,為實現(xiàn)上述目的,本發(fā)明還提供了一種分布式數(shù)據(jù)庫連接裝置,包括:
配置模塊,用于將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享;
連接模塊,用于設定所述連接池的指定線程執(zhí)行空閑連接檢查的操作,當接收到客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述請求及所述空閑連接檢查的操作結(jié)果返回一個空閑連接給所述客戶端。
可選地,所述請求包括目標數(shù)據(jù)庫名稱及數(shù)據(jù)庫實例名稱,所述連接模塊包括:
獲取單元,用于當接收到客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述數(shù)據(jù)庫實例名稱查找目標數(shù)據(jù)庫實例,并根據(jù)所述目標數(shù)據(jù)庫名稱在所述目標數(shù)據(jù)庫實例中獲取目標數(shù)據(jù)庫;
判斷單元,用于判斷所述目標數(shù)據(jù)庫是否存在空閑連接;
返回單元,用于若所述目標數(shù)據(jù)庫存在空閑連接,則返回一個空閑連接給所述客戶端。
可選地,所述連接模塊還包括:
偵測單元,用于當所述目標數(shù)據(jù)庫不存在空閑連接時,偵測與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫是否存在空閑連接;
處理單元,用于若與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫存在空閑連接,則返回一個空閑連接給所述客戶端,并將所述空閑連接對應的所述數(shù)據(jù)庫的名稱,修改為所述目標數(shù)據(jù)庫的名稱。
可選地,所述接收模塊還包括:
創(chuàng)建單元,用于當與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫不存在空閑連接時,設定所述連接池的固定線程執(zhí)行異步建立連接操作,根據(jù)所述異步建立連接操作在所述目標數(shù)據(jù)庫下創(chuàng)建一個新的連接,并將所述新的連接返回給所述客戶端。
可選地,所述分布式數(shù)據(jù)庫連接裝置還包括:
歸還模塊,用于當所述客戶端根據(jù)得到目標數(shù)據(jù)庫的指定連接完成執(zhí)行數(shù)據(jù)庫操作后,控制所述客戶端將所述指定連接歸還至所述連接池,并將所述指定連的接狀態(tài)設置為空閑連接狀態(tài)。
本發(fā)明實施例提供的分布式數(shù)據(jù)庫連接方法和裝置,通過將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享;設定所述連接池的指定線程執(zhí)行空閑連接檢查的操作,當接收到客戶端發(fā)送的向連接池申請連接的請求時,根據(jù)該請求及空閑連接檢查的操作結(jié)果返回一個空閑連接給客戶端。實現(xiàn)了多個數(shù)據(jù)庫共用一個連接池,減少了連接池的線程數(shù)量,節(jié)省了系統(tǒng)資源。
附圖說明
圖1為本發(fā)明分布式數(shù)據(jù)庫連接方法一實施例的流程示意圖;
圖2為本發(fā)明分布式數(shù)據(jù)庫連接裝置一實施例的功能模塊示意圖。
本發(fā)明目的的實現(xiàn)、功能特點及優(yōu)點將結(jié)合實施例,參照附圖做進一步說明。
具體實施方式
應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,示出了本發(fā)明一種分布式數(shù)據(jù)庫連接方法第一實施例。該實施例的分布式數(shù)據(jù)庫連接方法包括:
步驟S10、將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享;
數(shù)據(jù)庫連接是一種非常關鍵且有限的資源,如果數(shù)據(jù)庫連接被反復地打開和關閉,將會嚴重浪費數(shù)據(jù)庫大量的系統(tǒng)資源,同時會降低數(shù)據(jù)庫的訪問效率。一種高效的對數(shù)據(jù)庫連接的管理方法將能夠明顯的降低數(shù)據(jù)庫對系統(tǒng)資源的消耗,同時提升數(shù)據(jù)庫和訪問該數(shù)據(jù)庫的應用程序性能。數(shù)據(jù)庫連接池可通過復用數(shù)據(jù)庫連接來減少頻繁的打開和關閉連接進而提升數(shù)據(jù)庫操作性能。
本實施例中,為了降低數(shù)據(jù)庫對系統(tǒng)資源的消耗,首先,將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享,即連接池內(nèi)部將連接按照數(shù)據(jù)庫實例進行分組,每個數(shù)據(jù)庫實例里的連接又按照數(shù)據(jù)庫進行分組。實現(xiàn)了多個數(shù)據(jù)庫共享一個連接池,從而使得同一個數(shù)據(jù)庫實例的不同數(shù)據(jù)庫之間的連接可以復用,節(jié)省了系統(tǒng)資源。
步驟S20、設定所述連接池的指定線程執(zhí)行空閑連接檢查的操作,當接收到客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述請求及所述空閑連接檢查的操作結(jié)果返回一個空閑連接給所述客戶端。
基于上述所有數(shù)據(jù)庫實例中的數(shù)據(jù)庫共享一個連接池,可設定該連接池使用固定數(shù)量的指定線程進行空閑連接檢查、異步建立連接以及異步關閉連接等。使得連接池線程數(shù)量相對于一個數(shù)據(jù)庫配置一個獨立的連接較少,提高了客戶端中應用程序的服務能力。
當客戶端向連接池申請連接時,分布式數(shù)據(jù)庫連接裝置先根據(jù)指定的數(shù)據(jù)庫實例的名稱找到到相應的目標數(shù)據(jù)庫實例的連接分組,然后再根據(jù)指定的數(shù)據(jù)庫名稱找到該目標數(shù)據(jù)庫對應的連接分組里獲取連接。
若該目標數(shù)據(jù)庫里沒有空閑連接,則遍歷同一實施例的數(shù)據(jù)庫分組獲取連接,如果同一實施例中的其他數(shù)據(jù)庫有空閑連接,則通過use命令來切換數(shù)據(jù)庫進行連接復用,如果同一實施例中的其他數(shù)據(jù)庫沒有空閑連接,則創(chuàng)建一個指向目標數(shù)據(jù)庫的新的連接。從而使得客戶端能夠獲取連接,解決了分布式數(shù)據(jù)庫中傳統(tǒng)連接池消耗資源過多且無法進行同數(shù)據(jù)庫實例多數(shù)據(jù)庫的連接復用問題。
本發(fā)明實施例通過將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享;設定所述連接池的指定線程執(zhí)行空閑連接檢查的操作,當接收到客戶端發(fā)送的向連接池申請連接的請求時,根據(jù)該請求及空閑連接檢查的操作結(jié)果返回一個空閑連接給客戶端。實現(xiàn)了多個數(shù)據(jù)庫共用一個連接池,減少了連接池的線程數(shù)量,節(jié)省了系統(tǒng)資源。
進一步地,基于上述分布式數(shù)據(jù)庫連接方法第一實施例,提出了本發(fā)明分布式數(shù)據(jù)庫連接方法第二實施例,該實施例中上述步驟S20包括:
當接收客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述數(shù)據(jù)庫實例名稱查找目標數(shù)據(jù)庫實例,并根據(jù)所述目標數(shù)據(jù)庫名稱在所述目標數(shù)據(jù)庫實例中獲取目標數(shù)據(jù)庫;
判斷所述目標數(shù)據(jù)庫是否存在空閑連接;
若所述目標數(shù)據(jù)庫存在空閑連接,則返回一個空閑連接給所述客戶端。
本實施例中,當客戶端向分布式數(shù)據(jù)庫連接裝置中的連接池發(fā)送申請連接的請求時,該請求包括目標數(shù)據(jù)庫名稱及數(shù)據(jù)庫實例名稱,先根據(jù)目標數(shù)據(jù)庫名稱找到到相應的目標數(shù)據(jù)庫實例的連接分組,然后根據(jù)目標數(shù)據(jù)庫名稱在目標數(shù)據(jù)庫實例中找到相應的目標數(shù)據(jù)庫,以便到該目標數(shù)據(jù)庫對應的連接分組里獲取連接。找到對應的目標數(shù)據(jù)庫后,首先判斷該目標數(shù)據(jù)庫是否存在空閑連接,若存在空閑連接,則選擇一個空閑連接返回給客戶端,同時可將該空閑連接的狀態(tài)設置為使用狀態(tài)。
進一步地,本實施例中,上述判斷所述目標數(shù)據(jù)庫是否存在空閑連接的步驟之后包括:
當所述目標數(shù)據(jù)庫不存在空閑連接時,偵測與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫是否存在空閑連接;
若是,則返回一個空閑連接給所述客戶端,并將所述空閑連接對應的所述數(shù)據(jù)庫的名稱,修改為所述目標數(shù)據(jù)庫的名稱。
本實施例中,若該目標數(shù)據(jù)庫里沒有空閑連接,則遍歷同一實施例的其他數(shù)據(jù)庫分組獲取連接,如果同一實施例的其他數(shù)據(jù)庫有空閑連接,則通過use命令來切換數(shù)據(jù)庫進行連接復用,即從存在空閑連接的數(shù)據(jù)庫中選擇一個空閑連接返回給客戶端,并將該空閑連接對應的數(shù)據(jù)庫的名稱,修改為目標數(shù)據(jù)庫的名稱,同時可將該空閑連接的狀態(tài)設置為使用狀態(tài)。
進一步地,本實施例中,上述偵測與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫是否存在空閑連接的步驟之后包括:
當與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫不存在空閑連接時,設定所述連接池的固定線程執(zhí)行異步建立連接操作,根據(jù)所述異步建立連接操作在所述目標數(shù)據(jù)庫下創(chuàng)建一個新的連接,并將所述新的連接返回給所述客戶端。
本實施例中,若同一實施例的其他數(shù)據(jù)庫中沒有空閑連接,則連接池的固定線程執(zhí)行異步建立連接操作,創(chuàng)建一個指向目標數(shù)據(jù)庫的新的連接,即在該目標數(shù)據(jù)庫下創(chuàng)建一個新的連接。將該新的連接返回給客戶端,同時可將該新的連接的狀態(tài)設置為使用狀態(tài)。
本實施例在接收到客戶端發(fā)送的向連接池申請連接的請求后,當目標數(shù)據(jù)庫中存在空閑連接時,選擇一個空閑連接返回給客戶端;當目標數(shù)據(jù)庫不存在空閑連接時,若與目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫存在空閑連接,則選擇一個空閑連接返回給客戶端,否則在目標數(shù)據(jù)庫下創(chuàng)建一個新的連接返回給客戶端。使得不僅實現(xiàn)了多個數(shù)據(jù)庫共享一個連接池,同一個數(shù)據(jù)庫實例的不同數(shù)據(jù)庫之間的連接可以復用,而且減少了連接池線程數(shù)量,節(jié)省了系統(tǒng)資源。
進一步地,基于上述分布式數(shù)據(jù)庫連接方法第一或第二實施例,提出了本發(fā)明分布式數(shù)據(jù)庫連接方法第三實施例,該實施例中上述分布式數(shù)據(jù)庫連接方法還包括:
當所述客戶端根據(jù)得到目標數(shù)據(jù)庫的指定連接完成執(zhí)行數(shù)據(jù)庫操作后,控制所述客戶端將所述指定連接歸還至所述連接池,并將所述指定連的接狀態(tài)設置為空閑連接狀態(tài)。
本實施例中,客戶端在得到目標數(shù)據(jù)庫的指定連接后,進行數(shù)據(jù)庫操作。該目標數(shù)據(jù)庫的指定連接可為目標數(shù)據(jù)庫返回的空閑連接,也可以是與目標數(shù)據(jù)在同一數(shù)據(jù)庫實例內(nèi)的其他數(shù)據(jù)庫返回的空閑連接,或者是,創(chuàng)建一個指向目標數(shù)據(jù)庫的新的連接。
在客戶端執(zhí)行操作完畢后,把目標數(shù)據(jù)庫的指定連接歸還給連接池,同時把該指定連的接狀態(tài)設置為空閑連接狀態(tài),從而使得連接池不需要定期清理空閑時間過長的連接來降低數(shù)據(jù)庫的連接數(shù)量,提高了連接池進行數(shù)據(jù)庫連接的便捷性。
本實施例在客戶端完成執(zhí)行數(shù)據(jù)庫操作后,可將連接歸還至連接池,使得連接池可通過合理設置連接數(shù),可以有效的保障數(shù)據(jù)庫的可用性。
對應地,如圖2所示,提出本發(fā)明一種分布式數(shù)據(jù)庫連接裝置第一實施例。該實施例的分布式數(shù)據(jù)庫連接裝置包括:
配置模塊100,用于將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享;
數(shù)據(jù)庫連接是一種非常關鍵且有限的資源,如果數(shù)據(jù)庫連接被反復地打開和關閉,將會嚴重浪費數(shù)據(jù)庫大量的系統(tǒng)資源,同時會降低數(shù)據(jù)庫的訪問效率。一種高效的對數(shù)據(jù)庫連接的管理方法將能夠明顯的降低數(shù)據(jù)庫對系統(tǒng)資源的消耗,同時提升數(shù)據(jù)庫和訪問該數(shù)據(jù)庫的應用程序性能。數(shù)據(jù)庫連接池可通過復用數(shù)據(jù)庫連接來減少頻繁的打開和關閉連接進而提升數(shù)據(jù)庫操作性能。
本實施例中,為了降低數(shù)據(jù)庫對系統(tǒng)資源的消耗,首先,配置模塊100將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享,即連接池內(nèi)部將連接按照數(shù)據(jù)庫實例進行分組,每個數(shù)據(jù)庫實例里的連接又按照數(shù)據(jù)庫進行分組。實現(xiàn)了多個數(shù)據(jù)庫共享一個連接池,從而使得同一個數(shù)據(jù)庫實例的不同數(shù)據(jù)庫之間的連接可以復用,節(jié)省了系統(tǒng)資源。
連接模塊200,用于設定所述連接池的指定線程執(zhí)行空閑連接檢查的操作,當接收到客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述請求及所述空閑連接檢查的操作結(jié)果返回一個空閑連接給所述客戶端。
基于上述所有數(shù)據(jù)庫實例中的數(shù)據(jù)庫共享一個連接池,連接模塊200可設定該連接池使用固定數(shù)量的指定線程進行空閑連接檢查、異步建立連接以及異步關閉連接等。使得連接池線程數(shù)量相對于一個數(shù)據(jù)庫配置一個獨立的連接較少,提高了客戶端中應用程序的服務能力。
當客戶端向連接池申請連接時,連接模塊200接收到客戶端發(fā)送的向連接池申請連接的請求后,先根據(jù)指定的數(shù)據(jù)庫實例的名稱找到到相應的目標數(shù)據(jù)庫實例的連接分組,然后再根據(jù)指定的數(shù)據(jù)庫名稱找到該目標數(shù)據(jù)庫對應的連接分組里獲取連接。
若該目標數(shù)據(jù)庫里沒有空閑連接,則遍歷同一實施例的數(shù)據(jù)庫分組獲取連接,如果同一實施例中的其他數(shù)據(jù)庫有空閑連接,則通過use命令來切換數(shù)據(jù)庫進行連接復用,如果同一實施例中的其他數(shù)據(jù)庫沒有空閑連接,則創(chuàng)建一個指向目標數(shù)據(jù)庫的新的連接。從而使得客戶端能夠獲取連接,解決了分布式數(shù)據(jù)庫中傳統(tǒng)連接池消耗資源過多且無法進行同數(shù)據(jù)庫實例多數(shù)據(jù)庫的連接復用問題。
本發(fā)明實施例通過將多個數(shù)據(jù)庫實例進行分組,其中每組數(shù)據(jù)庫實例中包括至少一個數(shù)據(jù)庫,并配置一個連接池供所有數(shù)據(jù)庫實例的數(shù)據(jù)庫共享;設定所述連接池的指定線程執(zhí)行空閑連接檢查的操作,當接收到客戶端發(fā)送的向連接池申請連接的請求時,根據(jù)該請求及空閑連接檢查的操作結(jié)果返回一個空閑連接給客戶端。實現(xiàn)了多個數(shù)據(jù)庫共用一個連接池,減少了連接池的線程數(shù)量,節(jié)省了系統(tǒng)資源。
進一步地,基于上述分布式數(shù)據(jù)庫連接裝置第一實施例,提出了本發(fā)明分布式數(shù)據(jù)庫連接裝置第二實施例,該實施例中上述接連接模塊200包括:
獲取單元,用于當接收客戶端發(fā)送的向所述連接池申請連接的請求時,根據(jù)所述數(shù)據(jù)庫實例名稱查找目標數(shù)據(jù)庫實例,并根據(jù)所述目標數(shù)據(jù)庫名稱在所述目標數(shù)據(jù)庫實例中獲取目標數(shù)據(jù)庫;
判斷單元,用于判斷所述目標數(shù)據(jù)庫是否存在空閑連接;
返回單元,用于若所述目標數(shù)據(jù)庫存在空閑連接,則返回一個空閑連接給所述客戶端。
本實施例中,當客戶端向分布式數(shù)據(jù)庫連接裝置中的連接池申請連接時,接收客戶端發(fā)送的向連接池申請連接的請求,該請求包括目標數(shù)據(jù)庫名稱及數(shù)據(jù)庫實例名稱。獲取單元先根據(jù)目標數(shù)據(jù)庫名稱找到到相應的目標數(shù)據(jù)庫實例的連接分組,然后根據(jù)目標數(shù)據(jù)庫名稱在目標數(shù)據(jù)庫實例中找到相應的目標數(shù)據(jù)庫,以便到該目標數(shù)據(jù)庫對應的連接分組里獲取連接。找到對應的目標數(shù)據(jù)庫后,首先由判斷單元判斷該目標數(shù)據(jù)庫是否存在空閑連接,若存在空閑連接,則返回單元選擇一個空閑連接返回給客戶端,同時可將該空閑連接的狀態(tài)設置為使用狀態(tài)。
進一步地,本實施例中,上述接連接模塊200還包括:
偵測單元,用于當所述目標數(shù)據(jù)庫不存在空閑連接時,偵測與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫是否存在空閑連接;
處理單元,用于若與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫存在空閑連接,則返回一個空閑連接給所述客戶端,并將所述空閑連接對應的所述數(shù)據(jù)庫的名稱,修改為所述目標數(shù)據(jù)庫的名稱。
本實施例中,若該目標數(shù)據(jù)庫里沒有空閑連接,則遍歷同一實施例的其他數(shù)據(jù)庫分組獲取連接,由偵測單元偵測與目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫是否存在空閑連接。如果同一實施例的其他數(shù)據(jù)庫有空閑連接,則處理單元通過use命令來切換數(shù)據(jù)庫進行連接復用,即處理單元從存在空閑連接的數(shù)據(jù)庫中選擇一個空閑連接返回給客戶端,并將該空閑連接對應的數(shù)據(jù)庫的名稱,修改為目標數(shù)據(jù)庫的名稱,同時可將該空閑連接的狀態(tài)設置為使用狀態(tài)。
進一步地,本實施例中,上述接連接模塊200還包括:
創(chuàng)建單元,用于當與所述目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫不存在空閑連接時,設定所述連接池的固定線程執(zhí)行異步建立連接操作,根據(jù)所述異步建立連接操作在所述目標數(shù)據(jù)庫下創(chuàng)建一個新的連接,并將所述新的連接返回給所述客戶端。
本實施例中,若同一實施例的其他數(shù)據(jù)庫中沒有空閑連接,則連接池的固定線程執(zhí)行異步建立連接操作,創(chuàng)建單元創(chuàng)建一個指向目標數(shù)據(jù)庫的新的連接,即在該目標數(shù)據(jù)庫下創(chuàng)建一個新的連接。將該新的連接返回給客戶端,同時可將該新的連接的狀態(tài)設置為使用狀態(tài)。
本實施例在接收到客戶端發(fā)送的向連接池申請連接的請求后,當目標數(shù)據(jù)庫中存在空閑連接時,選擇一個空閑連接返回給客戶端;當目標數(shù)據(jù)庫不存在空閑連接時,若與目標數(shù)據(jù)庫在同一數(shù)據(jù)庫實例組別內(nèi)的其他數(shù)據(jù)庫存在空閑連接,則選擇一個空閑連接返回給客戶端,否則在目標數(shù)據(jù)庫下創(chuàng)建一個新的連接返回給客戶端。使得不僅實現(xiàn)了多個數(shù)據(jù)庫共享一個連接池,同一個數(shù)據(jù)庫實例的不同數(shù)據(jù)庫之間的連接可以復用,而且減少了連接池線程數(shù)量,節(jié)省了系統(tǒng)資源。
進一步地,基于上述分布式數(shù)據(jù)庫連接裝置第一或第二實施例,提出了本發(fā)明分布式數(shù)據(jù)庫連接裝置第三實施例,該實施例中上述分布式數(shù)據(jù)庫連接裝置還包括:
歸還模塊,用于當所述客戶端根據(jù)得到目標數(shù)據(jù)庫的指定連接完成執(zhí)行數(shù)據(jù)庫操作后,控制所述客戶端將所述指定連接歸還至所述連接池,并將所述指定連的接狀態(tài)設置為空閑連接狀態(tài)。
本實施例中,客戶端在得到目標數(shù)據(jù)庫的指定連接后,進行數(shù)據(jù)庫操作。該目標數(shù)據(jù)庫的指定連接可為目標數(shù)據(jù)庫返回的空閑連接,也可以是與目標數(shù)據(jù)在同一數(shù)據(jù)庫實例內(nèi)的其他數(shù)據(jù)庫返回的空閑連接,或者是,創(chuàng)建一個指向目標數(shù)據(jù)庫的新的連接。
在客戶端執(zhí)行操作完畢后,歸還模塊把目標數(shù)據(jù)庫的指定連接歸還給連接池,同時把該指定連的接狀態(tài)設置為空閑連接狀態(tài),從而使得連接池不需要定期清理空閑時間過長的連接來降低數(shù)據(jù)庫的連接數(shù)量,提高了連接池進行數(shù)據(jù)庫連接的便捷性。
本實施例在客戶端完成執(zhí)行數(shù)據(jù)庫操作后,可將連接歸還至連接池,使得連接池可通過合理設置連接數(shù),可以有效的保障數(shù)據(jù)庫的可用性。
以上僅為本發(fā)明的優(yōu)選實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運用在其他相關的技術領域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。