專利名稱:訪問數(shù)據(jù)庫的方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫技術(shù),特別涉及一種訪問數(shù)據(jù)庫的方法和系統(tǒng)。
背景技術(shù):
銀行的前端應(yīng)用是銀行處理客戶交易時與客戶的交互界面。通過前端應(yīng)用完成與客戶交互的過程中,需要獲得此次交易的相關(guān)信息,并將此次交易的一些內(nèi)容進行記錄,而這些相關(guān)信息和內(nèi)容存儲于銀行的數(shù)據(jù)庫中,因此,在該過程中,前端應(yīng)用要對銀行的數(shù)據(jù)庫進行訪問,以實現(xiàn)對數(shù)據(jù)庫信息的寫入和讀取。
以往的銀行系統(tǒng)中,前端應(yīng)用和數(shù)據(jù)庫及其它服務(wù)器部署在各個網(wǎng)點,這種方式對設(shè)備的投入巨大,維護很不方便,而且當(dāng)維護時,對銀行維護人員的技術(shù)能力要求較高,人力投入也較大,這樣,與銀行的集約化經(jīng)營方向相背離。為適應(yīng)集約化經(jīng)營的需要,提出了對銀行的相關(guān)業(yè)務(wù)系統(tǒng)進行集中化管理。目前銀行系統(tǒng)采用的方式是將一級分行所轄網(wǎng)點的前端應(yīng)用對應(yīng)的數(shù)據(jù)庫集中上收至該一級分行,由該一級分行統(tǒng)一管理和維護,而網(wǎng)點只有執(zhí)行前端應(yīng)用的終端,服務(wù)器和網(wǎng)絡(luò)設(shè)備。
圖1示出了該方式的網(wǎng)絡(luò)結(jié)構(gòu)圖。如圖所示,該方式下,一個服務(wù)器上有一套前端應(yīng)用,前端應(yīng)用完成客戶交易處理過程。當(dāng)訪問數(shù)據(jù)庫時,前端應(yīng)用建立長連接到一級分行的數(shù)據(jù)庫,進行對數(shù)據(jù)庫中相關(guān)信息的寫入和讀取,從而完成此次交易,前端應(yīng)用退出時釋放該長連接。
但是,一級分行所轄有很多網(wǎng)點,這些網(wǎng)點的前端應(yīng)用共用一個數(shù)據(jù)庫,而數(shù)據(jù)庫支持的長連接數(shù)是有限的。這樣,每個前端應(yīng)用訪問數(shù)據(jù)庫時,都要建立一個單獨的長連接,導(dǎo)致一級分行系統(tǒng)同時能帶的網(wǎng)點個數(shù)是有限的,那么當(dāng)一級分行系統(tǒng)帶的網(wǎng)點個數(shù)達到上限時,不能再支持新的前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問請求,必須在數(shù)據(jù)庫可以建立長連接時,即之前有前端應(yīng)用退出而釋放長連接時,新的前端應(yīng)用才能利用該長連接接入數(shù)據(jù)庫,則,系統(tǒng)產(chǎn)生了性能瓶頸,對大型銀行來說,不能滿足高效處理客戶交易的需求。另外,每次建立和釋放長連接都要消耗很大的系統(tǒng)資源,則很多前端應(yīng)用的不斷接入和退出也降低了系統(tǒng)的資源可利用率。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種訪問數(shù)據(jù)庫的方法和系統(tǒng),以克服現(xiàn)有技術(shù)中由于一級分行系統(tǒng)同時能帶的網(wǎng)點個數(shù)有限而導(dǎo)致的系統(tǒng)性能瓶頸的缺點。
為解決上述技術(shù)問題,本發(fā)明提供一種訪問數(shù)據(jù)庫的方法和系統(tǒng)是這樣實現(xiàn)的一種訪問數(shù)據(jù)庫的方法,數(shù)據(jù)庫與數(shù)據(jù)庫訪問子系統(tǒng)預(yù)先創(chuàng)建并維持一組長連接,當(dāng)前端應(yīng)用訪問數(shù)據(jù)庫時,包括前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口;數(shù)據(jù)庫訪問接口根據(jù)收到的數(shù)據(jù)庫訪問命令,建立與數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問控制器間的短連接,通過該短連接發(fā)送數(shù)據(jù)庫訪問命令;數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫;通過該長連接和所述建立的短連接返回數(shù)據(jù)庫訪問結(jié)果到前端應(yīng)用。
所述數(shù)據(jù)庫與數(shù)據(jù)庫訪問子系統(tǒng)預(yù)先創(chuàng)建并維持一組長連接由以下方式實現(xiàn)數(shù)據(jù)庫與數(shù)據(jù)庫訪問子系統(tǒng)間根據(jù)配置文件中設(shè)定的經(jīng)驗值預(yù)先創(chuàng)建并維持一組長連接。
所述前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問接口由以下方式實現(xiàn)前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口;由數(shù)據(jù)庫訪問接口中的應(yīng)用接口收到所述訪問命令,根據(jù)該訪問命令生成請求報文,并將該報文發(fā)送到第一通訊接口,該第一通訊接口位于數(shù)據(jù)庫訪問接口中。
所述數(shù)據(jù)庫訪問接口建立與數(shù)據(jù)庫訪問控制器間的短連接由以下方式實現(xiàn)所述第一通訊接口根據(jù)收到的請求報文建立與第二通訊接口的短連接,并通過該短連接發(fā)送請求報文到第二通訊接口,所述第二通訊接口位于數(shù)據(jù)庫訪問控制器中。
所述數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫由以下方式實現(xiàn)數(shù)據(jù)庫訪問控制器中的第二通訊接口根據(jù)從短連接收到的請求報文,發(fā)送數(shù)據(jù)庫訪問請求到數(shù)據(jù)庫訪問控制器中的數(shù)據(jù)庫服務(wù)接口;數(shù)據(jù)庫服務(wù)接口根據(jù)收到的訪問請求,選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫。
所述前端應(yīng)用通過長連接和短連接完成數(shù)據(jù)庫訪問后還包括釋放所述短連接,并歸還所述占用的長連接。
所述短連接為UNIX域套接字。
本方法還包括當(dāng)前端系統(tǒng)初始化時,將對應(yīng)的靜態(tài)表裝入數(shù)據(jù)庫側(cè)共享內(nèi)存中;前端應(yīng)用將讀取靜態(tài)表的操作改為讀取共享內(nèi)存;前端應(yīng)用通過操作共享內(nèi)存完成對靜態(tài)表的訪問。
共享內(nèi)存區(qū)建立數(shù)據(jù)存放區(qū)、索引區(qū)和索引沖突區(qū),其中索引區(qū)和索引沖突區(qū)都包括哈希值、數(shù)據(jù)指針和Next指針,靜態(tài)表中的一列值為關(guān)鍵值,所述將數(shù)據(jù)庫中的靜態(tài)表裝入數(shù)據(jù)庫側(cè)共享內(nèi)存中由以下方式實現(xiàn)計算靜態(tài)表需要的共享內(nèi)存容量,并申請該容量的共享內(nèi)存作為存儲該靜態(tài)表的數(shù)據(jù)存放區(qū);將所述靜態(tài)表載入所述數(shù)據(jù)存放區(qū);根據(jù)靜態(tài)表中記錄的關(guān)鍵值,使用哈希算法計算對應(yīng)的哈希值,當(dāng)所述哈希值與索引區(qū)已有的哈希值不沖突時,將所述哈希值和該記錄所在內(nèi)存的地址載入對應(yīng)索引區(qū)和數(shù)據(jù)指針中;當(dāng)所述哈希值與索引區(qū)已有的哈希值沖突時,將所述哈希值和該記錄所在內(nèi)存的地址載入對應(yīng)索引沖突區(qū)和數(shù)據(jù)指針中,并將所在索引沖突區(qū)的地址填入所述索引區(qū)的Next指針中。
所述當(dāng)所述哈希值與索引區(qū)已有的哈希值沖突時,將所述哈希值和該記錄所在內(nèi)存的地址載入對應(yīng)索引沖突區(qū)和數(shù)據(jù)指針中,而所述哈希值與索引沖突區(qū)發(fā)生再次發(fā)生沖突時,將該記錄的內(nèi)存地址載入索引沖突區(qū)的數(shù)據(jù)指針中。
所述前端應(yīng)用通過操作共享內(nèi)存完成對數(shù)據(jù)庫的靜態(tài)表的訪問由以下方式實現(xiàn)由查詢值利用哈希算法得到哈希值,在索引區(qū)中得到該哈希值對應(yīng)數(shù)據(jù)指針中的地址,如果該查詢值與所述地址中的記錄的關(guān)鍵值相同,則讀取記錄;如果該查詢值與所述地址中的記錄的關(guān)鍵值不相同,則到索引區(qū)Next指針指向的地址中讀取數(shù)據(jù)指針,從該數(shù)據(jù)指針指向的地址中讀取記錄。
一種訪問數(shù)據(jù)庫的系統(tǒng),該系統(tǒng)包括前端應(yīng)用、數(shù)據(jù)庫訪問子系統(tǒng)和數(shù)據(jù)庫,其中,數(shù)據(jù)庫訪問子系統(tǒng)中包括數(shù)據(jù)庫訪問接口和數(shù)據(jù)庫訪問控制器;前端應(yīng)用用于發(fā)起對數(shù)據(jù)庫的訪問;數(shù)據(jù)庫用于存儲數(shù)據(jù);數(shù)據(jù)庫訪問接口用于接收前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并解釋該命令,建立與數(shù)據(jù)庫訪問控制器之間的短連接,通過該短連接發(fā)送所述命令到數(shù)據(jù)庫訪問控制器;數(shù)據(jù)庫訪問控制器預(yù)先與數(shù)據(jù)庫之間維持一組長連接,用于當(dāng)收到訪問命令后,選取一個空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到數(shù)據(jù)庫返回的訪問結(jié)果。
所述數(shù)據(jù)庫訪問接口包括應(yīng)用接口和第一通訊接口,其中,應(yīng)用接口用于接收并解釋前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并將解釋后生成的請求報文發(fā)送到第一通訊接口;第一通訊接口用于收到請求報文后建立與第二通訊接口間的短連接,通過該短連接發(fā)送請求報文到第二通訊接口。
所述數(shù)據(jù)庫訪問控制器包括數(shù)據(jù)庫服務(wù)接口和第二通訊接口,其中,第二通訊接口與數(shù)據(jù)庫訪問接口相連,用于將收到的請求報文發(fā)送到數(shù)據(jù)庫訪問接口;
數(shù)據(jù)庫服務(wù)接口用于收到請求報文后選取空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到訪問結(jié)果。
還包括數(shù)據(jù)庫側(cè)的共享內(nèi)存,用于存儲靜態(tài)表并提供前端應(yīng)用讀取靜態(tài)表上數(shù)據(jù)。
所述共享內(nèi)存包括數(shù)據(jù)存放區(qū)、索引區(qū)和索引沖突區(qū),其中,數(shù)據(jù)存放區(qū)用于存儲靜態(tài)表;索引區(qū)用于存放靜態(tài)表的哈希值、關(guān)鍵值、數(shù)據(jù)所在數(shù)據(jù)存放區(qū)的內(nèi)存地址和對應(yīng)索引沖突區(qū)的內(nèi)存地址;索引沖突區(qū)用于存放靜態(tài)表的關(guān)鍵值、數(shù)據(jù)所在數(shù)據(jù)存放區(qū)的內(nèi)存地址和對應(yīng)索引沖突區(qū)的內(nèi)存地址。
一種數(shù)據(jù)庫訪問子系統(tǒng),包括數(shù)據(jù)庫訪問接口和數(shù)據(jù)庫訪問控制器,其中,數(shù)據(jù)庫訪問接口用于接收前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并解釋該命令,建立與數(shù)據(jù)庫訪問控制器之間的短連接,通過該短連接發(fā)送所述命令到數(shù)據(jù)庫訪問控制器;數(shù)據(jù)庫訪問控制器預(yù)先與數(shù)據(jù)庫之間維持一組長連接,用于當(dāng)收到訪問命令后,選取一個空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到數(shù)據(jù)庫返回的訪問結(jié)果。
所述數(shù)據(jù)庫訪問接口包括應(yīng)用接口和第一通訊接口,其中,應(yīng)用接口用于接收并解釋前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并將解釋后生成的請求報文發(fā)送到第一通訊接口;第一通訊接口用于收到請求報文后建立與第二通訊接口間的短連接,通過該短連接發(fā)送請求報文到第二通訊接口。
所述數(shù)據(jù)庫訪問控制器包括數(shù)據(jù)庫服務(wù)接口和第二通訊接口,其中,第二通訊接口與數(shù)據(jù)庫訪問接口相連,用于將收到的請求報文發(fā)送到數(shù)據(jù)庫訪問接口;數(shù)據(jù)庫服務(wù)接口用于收到請求報文后選取空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到訪問結(jié)果。
由以上本發(fā)明提供的技術(shù)方案可見,本發(fā)明在數(shù)據(jù)庫訪問子系統(tǒng)和數(shù)據(jù)庫之間預(yù)先創(chuàng)建并維持一組長連接,當(dāng)前端應(yīng)用訪問數(shù)據(jù)庫時,前端應(yīng)用通過數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口建立與該子系統(tǒng)中數(shù)據(jù)庫訪問控制器間的短連接,該數(shù)據(jù)庫訪問控制器選取一個長連接,實現(xiàn)前端應(yīng)用通過該長連接和所述短連接訪問數(shù)據(jù)庫,而由于一個長連接可以對應(yīng)數(shù)十個短連接,因此大大增加了可以接入的前端應(yīng)用的數(shù)量,并充分利用了保持的長連接。
圖1為現(xiàn)有技術(shù)中前端應(yīng)用訪問數(shù)據(jù)庫的原理圖;圖2為本發(fā)明的系統(tǒng)原理圖;圖3為本發(fā)明方法的流程圖;圖4為本發(fā)明方法中一個實施例的流程圖;圖5為本發(fā)明方法中系統(tǒng)框圖;圖6為本發(fā)明中共享內(nèi)存原理圖。
具體實施例方式
本發(fā)明的核心是通過利用短連接結(jié)合長連接的方式實現(xiàn)前端應(yīng)用訪問數(shù)據(jù)庫。具體的,在前端應(yīng)用和數(shù)據(jù)庫之間引入數(shù)據(jù)庫訪問子系統(tǒng),并在數(shù)據(jù)庫訪問子系統(tǒng)和數(shù)據(jù)庫之間預(yù)先創(chuàng)建并維持一組長連接,當(dāng)前端應(yīng)用訪問數(shù)據(jù)庫時,前端應(yīng)用通過數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口建立與該子系統(tǒng)中數(shù)據(jù)庫訪問控制器間的短連接,該數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,實現(xiàn)前端應(yīng)用通過該長連接和所述短連接訪問數(shù)據(jù)庫。
本領(lǐng)域技術(shù)人員知道,長連接是客戶端接入數(shù)據(jù)庫操作啟動時建立的進程,只要進程不結(jié)束,就不會斷開客戶端與數(shù)據(jù)庫之間的長連接。例如,在客戶端接入數(shù)據(jù)庫操作啟動時,發(fā)出Open Database命令以建立進程,之后客戶端執(zhí)行select、update等數(shù)據(jù)庫操作,當(dāng)結(jié)束該次訪問數(shù)據(jù)庫操作時,發(fā)出CloseDatabase命令,斷開長連接。還存在短連接,其是客戶端僅需要進行數(shù)據(jù)庫操作時的連接,例如客戶端在執(zhí)行select、update等數(shù)據(jù)庫操作時的連接。數(shù)據(jù)庫支持的長連接數(shù)量有限,所以同時支持的客戶端有限。短連接僅在需要進行數(shù)據(jù)庫操作時才建立連接,所以可以在一段時間內(nèi)支持更多的客戶端。本發(fā)明正是將長連接和短連接進行了結(jié)合。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和實施方式對本發(fā)明作進一步的詳細(xì)說明。
本發(fā)明是通過數(shù)據(jù)庫服務(wù)器子系統(tǒng)實現(xiàn)長連接和短連接結(jié)合的。如圖2所示,數(shù)據(jù)庫訪問子系統(tǒng)包括數(shù)據(jù)庫訪問接口和數(shù)據(jù)庫訪問控制器。數(shù)據(jù)庫訪問接口負(fù)責(zé)接收并轉(zhuǎn)換前端應(yīng)用發(fā)來的數(shù)據(jù)庫操作命令,數(shù)據(jù)庫訪問控制器實現(xiàn)對數(shù)據(jù)庫的操作。
數(shù)據(jù)庫訪問控制器與數(shù)據(jù)庫之間預(yù)先創(chuàng)建并維持一組長連接,這些長連接可以構(gòu)成一個數(shù)據(jù)庫連接池。具體的,系統(tǒng)中存儲有配置文件中,該配置文件中設(shè)置了可以建立的長連接數(shù),該值可以由工作人員根據(jù)經(jīng)驗配置。系統(tǒng)啟動時,可以根據(jù)存儲的配置文件,建立并保持?jǐn)?shù)據(jù)庫訪問控制器與數(shù)據(jù)庫之間的長連接。
數(shù)據(jù)庫訪問接口與數(shù)據(jù)庫訪問控制器之間采用短連接。例如可以采用UNIX域套接字。采用UNIX域套接字可以使進程間的同步控制簡單,并可降低容錯處理的復(fù)雜度,從而可以提高系統(tǒng)運行的穩(wěn)定性和可靠性。
由于前端應(yīng)用處理的交易可能不同,因此,發(fā)出的數(shù)據(jù)庫訪問命令不同,這樣,多個前端應(yīng)用建立的短連接的類型不同,即使類型相同,可能建立的時機不同,而一個長連接可以執(zhí)行多個數(shù)據(jù)庫操作,這就意味著一個長連接可以對應(yīng)多個短連接。具體的,可以根據(jù)經(jīng)驗值將一個長連接對應(yīng)的短連接的個數(shù)設(shè)置在前面所述的配置文件中,從而實現(xiàn)短連接與長連接的合理配置,例如該值可以是1個長連接對應(yīng)15個短連接或20個短連接,那么,如果數(shù)據(jù)庫最大支持1000個長連接,則可以接入的前端訪問數(shù)量為1000*15或1000*20,這樣既大大增加了可以接入的前端應(yīng)用的數(shù)量,還充分利用了保持的長連接。
圖3示出了前端應(yīng)用訪問數(shù)據(jù)庫的一個實施例,由以下步驟實現(xiàn)步驟301前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問接口。
該步驟是銀行處理客戶交易過程中,需要訪問數(shù)據(jù)庫以寫入或讀取信息,則前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口,由數(shù)據(jù)庫訪問接口處理該訪問命令。
數(shù)據(jù)庫訪問接口中包含應(yīng)用接口和第一通訊接口。
應(yīng)用接口完成對經(jīng)過的信息的解釋,以使信息適于前端應(yīng)用的接收或在數(shù)據(jù)庫子系統(tǒng)中的傳送。具體為,對前端應(yīng)用發(fā)來的訪問命令的語法解釋,并發(fā)送到通訊接口;對通訊接口返回的應(yīng)答報文做報文解析,該應(yīng)答報文即本次數(shù)據(jù)庫訪問命令的執(zhí)行結(jié)果,將該執(zhí)行結(jié)果返回給前端應(yīng)用。
那么,該步驟可以分為以下兩個過程301a前端應(yīng)用發(fā)送結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)語句到應(yīng)用接口。這里,數(shù)據(jù)庫訪問命令具體為SQL語句。
301b應(yīng)用接口對SQL語句進行語法解釋后,生成請求報文,并發(fā)送該請求報文到第一通訊接口。這里,數(shù)據(jù)庫訪問命令具體為請求報文。
步驟302數(shù)據(jù)庫訪問接口建立與數(shù)據(jù)庫訪問控制器間的短連接,通過該短連接發(fā)送數(shù)據(jù)庫訪問命令。
本步驟是數(shù)據(jù)庫訪問接口根據(jù)收到的數(shù)據(jù)庫訪問命令,建立與數(shù)據(jù)庫訪問控制器間的短連接,并通過該短連接發(fā)送數(shù)據(jù)庫訪問命令。
前面提到數(shù)據(jù)庫訪問接口包括第一通訊接口,該接口收到應(yīng)用接口發(fā)來的請求報文。本步驟中,具體的,是第一通訊接口根據(jù)所述請求報文,建立與數(shù)據(jù)庫訪問控制器間的短連接,并將所述請求報文通過建立的短連接發(fā)送到數(shù)據(jù)庫訪問控制器。
如前所述,短連接可以采用UNIX域套接字。采用UNIX域套接字可以使進程間的同步控制簡單,并可降低容錯處理的復(fù)雜度,從而可以提高系統(tǒng)運行的穩(wěn)定性和可靠性。
步驟303數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫;通過該長連接和所述建立的短連接返回數(shù)據(jù)庫訪問結(jié)果到前端應(yīng)用。
前面提到,數(shù)據(jù)庫訪問控制器與數(shù)據(jù)庫間預(yù)先創(chuàng)建并保持有一組長連接,這些長連接構(gòu)成連接池。本步驟中,數(shù)據(jù)庫訪問控制器通過建立的短連接收到發(fā)來的請求報文,根據(jù)該請求報文,數(shù)據(jù)庫訪問控制器需要執(zhí)行訪問數(shù)據(jù)庫的操作,則從連接池中選取一個空閑的長連接執(zhí)行該操作。由于短連接執(zhí)行完訪問數(shù)據(jù)庫命令即退出占用的長連接,因此占用長連接的時間很短,因此,一段時間內(nèi)一個長連接可以與很多短連接相連,也就是說,短連接可以很容易的選取到空閑的長連接。
數(shù)據(jù)庫訪問控制器中包含第二通訊接口和數(shù)據(jù)庫服務(wù)接口。
第二通訊接口收到第一通訊接口通過建立的短連接發(fā)來的請求報文,將該請求報文發(fā)送到數(shù)據(jù)庫服務(wù)接口。
數(shù)據(jù)庫服務(wù)接口從連接池中選取一個空閑的長連接,通過該長連接執(zhí)行請求報文中的數(shù)據(jù)庫操作。選取長連接的方式如上面所述。
數(shù)據(jù)庫執(zhí)行請求的數(shù)據(jù)庫操作,將包含執(zhí)行結(jié)果的應(yīng)答報文通過長連接返回給數(shù)據(jù)庫服務(wù)接口,再通過第二通訊接口—短連接—第一通訊接口—應(yīng)用接口到達前端應(yīng)用。與前端應(yīng)用發(fā)數(shù)據(jù)庫訪問命令類似,不同的是應(yīng)答報文按照相反的方向傳送。
當(dāng)前端應(yīng)用完成本次數(shù)據(jù)庫訪問后,歸還占用的長連接,釋放建立的短連接。當(dāng)需要進行新的數(shù)據(jù)庫訪問時,或者其它前端應(yīng)用進行數(shù)據(jù)庫訪問時,重復(fù)上述過程,即建立新的短連接和選取長連接,通過短連接和長連接完成請求的數(shù)據(jù)庫操作。由于一個長連接可以對應(yīng)數(shù)十個短連接,同現(xiàn)有技術(shù)相比,本發(fā)明的方法支持接入的前端應(yīng)用數(shù)目提高了數(shù)十倍。
這樣,通過短連接—長連接的方式實現(xiàn)了增加接入的前端應(yīng)用數(shù)量的目的,并充分利用了長連接。
以下是一個完整的實施例。
根據(jù)配置文件,數(shù)據(jù)庫訪問控制器中的數(shù)據(jù)庫服務(wù)接口預(yù)先與數(shù)據(jù)庫之間創(chuàng)建并維持一組長連接。當(dāng)前端應(yīng)用需要訪問數(shù)據(jù)庫時包括以下步驟步驟401前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令SQL語句到數(shù)據(jù)庫訪問接口中的應(yīng)用接口。
步驟402應(yīng)用接口對SQL語句進行語法解釋,生成請求報文,并發(fā)送報文到第一通訊接口。
步驟403第一通訊接口建立與數(shù)據(jù)庫訪問控制器中的第二通訊接口的短連接,通過該短連接將請求報文以UNIX域套接字的方式發(fā)送到第二通訊接口。
步驟404第二通訊接口將該報文發(fā)送到數(shù)據(jù)庫服務(wù)接口。
步驟405數(shù)據(jù)庫服務(wù)接口從連接池中選取一個空閑的長連接,通過該長連接將請求報文發(fā)送到數(shù)據(jù)庫。
步驟406數(shù)據(jù)庫執(zhí)行請求的數(shù)據(jù)庫操作,并將包含操作結(jié)果的應(yīng)答報文通過長連接返回給數(shù)據(jù)庫服務(wù)接口。
步驟407數(shù)據(jù)庫服務(wù)接口將應(yīng)答報文返回給第二通訊接口。
步驟408第二通訊接口將應(yīng)答報文通過建立的短連接,以UNIX域套接字的方式返回給第一通訊接口。
步驟409第一通訊接口將應(yīng)答報文返回給應(yīng)用接口。
步驟410應(yīng)用接口對應(yīng)答報文進行報文解析后,將解析的執(zhí)行結(jié)果返回前端應(yīng)用。
步驟411釋放短連接,歸還長連接。
以上是本發(fā)明方法的一個完整實施例。
圖5給出了與本發(fā)明訪問數(shù)據(jù)庫的系統(tǒng)圖。
如圖所示,該系統(tǒng)包括前端應(yīng)用,數(shù)據(jù)庫訪問子系統(tǒng),數(shù)據(jù)庫。
數(shù)據(jù)庫訪問子系統(tǒng)中包括數(shù)據(jù)庫訪問接口,數(shù)據(jù)庫訪問控制器。
數(shù)據(jù)庫訪問接口與前端應(yīng)用和數(shù)據(jù)庫訪問控制器相連,用于接收前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并解釋該命令,建立與數(shù)據(jù)庫訪問控制器之間的短連接,通過該短連接發(fā)送所述命令到數(shù)據(jù)庫訪問控制器。
數(shù)據(jù)庫訪問控制器與數(shù)據(jù)訪問接口和數(shù)據(jù)庫相連,預(yù)先與數(shù)據(jù)庫之間維持一組長連接,當(dāng)收到訪問命令后,選取一個空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到數(shù)據(jù)庫返回的訪問結(jié)果。
其中,數(shù)據(jù)庫訪問接口包括應(yīng)用接口和第一通訊接口,數(shù)據(jù)庫訪問控制器包括數(shù)據(jù)庫服務(wù)接口和第二通訊接口。
應(yīng)用接口與前端應(yīng)用和第一通訊接口相連,用于接收并解釋前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并將解釋后生成的請求報文發(fā)送到第一通訊接口。
第一通訊接口與第二通訊接口相連,用于收到請求報文后建立與第二通訊接口間的短連接,通過該短連接發(fā)送請求報文到第二通訊接口。
第二通訊接口與數(shù)據(jù)庫訪問接口相連,用于將收到的請求報文發(fā)送到數(shù)據(jù)庫訪問接口。
數(shù)據(jù)庫服務(wù)接口與數(shù)據(jù)庫之間預(yù)先保持一組長連接,用于收到請求報文后選取空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到訪問結(jié)果。
訪問結(jié)果通過所述數(shù)據(jù)庫訪問接口—第二通訊接口—第一通訊接口—應(yīng)用接口到達前端應(yīng)用。
事實上,數(shù)據(jù)庫中存儲的內(nèi)容包括靜態(tài)表和動態(tài)表。靜態(tài)表中存儲一些諸如銀行的機構(gòu)號、機構(gòu)名等保持不變的信息,而動態(tài)表中存儲一些與交易有關(guān)的信息,由本次交易決定。而上述方法中,前端應(yīng)用通過短連接—長連接的方式訪問數(shù)據(jù)庫,訪問的內(nèi)容包括靜態(tài)表和動態(tài)表。并且,前端應(yīng)用對靜態(tài)表的訪問次數(shù)較多,而且進行的只是讀取操作。
基于上述內(nèi)容,本發(fā)明為實現(xiàn)快速獲取靜態(tài)表信息還包括以下方法前端系統(tǒng)初始化時將該前端系統(tǒng)對應(yīng)的靜態(tài)表裝入數(shù)據(jù)庫側(cè)的共享內(nèi)存中;前端應(yīng)用將讀取靜態(tài)表的操作更改為讀取共享內(nèi)存。
前端應(yīng)用通過操作共享內(nèi)存完成對靜態(tài)表的訪問。
以下先介紹共享內(nèi)存結(jié)構(gòu)。圖4示出了共享內(nèi)存的結(jié)構(gòu)。
如圖所示,共享內(nèi)存包括共享內(nèi)存結(jié)構(gòu)描述頭和共享內(nèi)存數(shù)據(jù)區(qū)兩部分。其中,共享內(nèi)存結(jié)構(gòu)描述頭存放共享內(nèi)存公用信息及各個靜態(tài)表所在數(shù)據(jù)區(qū)的地址。共享內(nèi)存數(shù)據(jù)區(qū)按順序存放各個靜態(tài)表。每個靜態(tài)表的數(shù)據(jù)區(qū)又可分為索引區(qū)、索引沖突區(qū)和數(shù)據(jù)存放區(qū)三部分。
將靜態(tài)表裝入共享內(nèi)存由以下方式實現(xiàn)
計算靜態(tài)表需要的共享內(nèi)存容量,并申請該容量的共享內(nèi)存作為存儲該靜態(tài)表的數(shù)據(jù)存放區(qū)。該計算過程可以調(diào)用初始化函數(shù)實現(xiàn)。
將靜態(tài)表載入數(shù)據(jù)存放區(qū)。該過程可以調(diào)用載入函數(shù),將靜態(tài)表中的記錄逐條載入,并將每一條記錄的哈希值、關(guān)鍵值和所在數(shù)據(jù)存放區(qū)的地址填入索引區(qū)或索引沖突區(qū)。
索引區(qū)和索引沖突區(qū)的結(jié)構(gòu)相同,都包含關(guān)鍵值,數(shù)據(jù)指針和Next指針。
將每一條記錄的哈希值、關(guān)鍵值和所在數(shù)據(jù)存放區(qū)的地址填入索引區(qū)或索引沖突區(qū)由以下方式實現(xiàn)利用哈希算法對靜態(tài)表中的關(guān)鍵(Key)值進行計算,得到哈希值,其中Key值是靜態(tài)表中的某一列。將該Key值由哈希算法得到的哈希值載入該靜態(tài)表對應(yīng)索引區(qū),如果該條記錄的哈希值不與所述索引區(qū)已有的哈希值沖突(即相同)時,將該條記錄的內(nèi)存地址填入索引區(qū)的數(shù)據(jù)指針部分,Next指針置為Null;如果該條記錄的哈希值與所述索引區(qū)已有的哈希值沖突,將該條記錄的內(nèi)存地址填入索引沖突區(qū)的數(shù)據(jù)指針部分,Next指針置為Null,并將所在索引沖突區(qū)的地址填入前述索引區(qū)Next指針中,替換Null。
以下以tbbranch表為例進行說明。tbbranch表包括機構(gòu)代碼orgcode、機構(gòu)名orgname和機構(gòu)狀態(tài)state三項,載入數(shù)據(jù)存放區(qū)的結(jié)構(gòu)與該表的結(jié)構(gòu)相同,如下所示機構(gòu)代碼(Key) 機構(gòu)名稱機構(gòu)狀態(tài)
表1.數(shù)據(jù)存放區(qū)中的tbbranch表機構(gòu)代碼這一列為Key值。每一行為一條記錄,該表中有三條記錄,三條記錄的內(nèi)存地址分別為Z1、Z2、Z3。
由哈希算法得到三條記錄的Key值對應(yīng)的哈希值分別為X1、X2、X1,可見第一條記錄和第三條記錄得到的哈希值是相同的。
索引區(qū)如下所示Key值 數(shù)據(jù)指針 Next指針
表2.索引區(qū)表(一)數(shù)據(jù)存放區(qū)載入第一條記錄時,在索引區(qū)的Key值填入322900001,數(shù)據(jù)指針填入該條記錄所在數(shù)據(jù)存放區(qū)的地址Z1,Next指針填為Null。載入第二條記錄與此類似。但是,載入第三條記錄時,哈希值也是X1,則此時,將322900003填入索引沖突區(qū)的Key值中,數(shù)據(jù)指針填入第三條記錄的地址Z3,Next指針填為Null,如下表所示Key值 數(shù)據(jù)指針 Next指針
表3.索引區(qū)沖突區(qū)表相應(yīng)的,將索引沖突區(qū)中的地址Y1填入索引區(qū)X1的Next指針,覆蓋Null。這樣,索引區(qū)如下表所示Key值數(shù)據(jù)指針 Next指針
表2.索引區(qū)表(二)相應(yīng)的讀取過程為例如要根據(jù)Key值讀取該條記錄的相關(guān)信息,首先由查詢值利用哈希算法得到哈希值,在索引區(qū)中得到該哈希值對應(yīng)地址的Key值,如果該查詢值與所述地址中的記錄的Key值相同,則根據(jù)該索引記錄的數(shù)據(jù)指針中的地址,讀取數(shù)據(jù)區(qū)對應(yīng)的記錄;如果該查詢值與所述地址中的記錄的Key值不相同,則到索引區(qū)Next指針指向的地址中讀取數(shù)據(jù)指針,進而從該數(shù)據(jù)指針指向的地址中讀取記錄。
以下仍以tbbranch表為例進行說明。
例如需要查詢某個機構(gòu)代碼的對應(yīng)狀態(tài)信息,如果該查詢值為322900002,查詢語句為“Select state from tbbranch where orgcode=322900002”,則利用哈希算法得到該查詢值對應(yīng)的哈希值X2,在索引區(qū)中查找X2對應(yīng)的Key值為322900002,與要查找的Key值322900002一致,說明X2的數(shù)據(jù)指針Z2指向的記錄就是要查找的記錄,到Z2地址中讀取相應(yīng)記錄即可。
但是如果查詢值為322900003,利用哈希算法得到X1,在索引區(qū)中查找X1地址的Key值為322900001,與查找的Key值322900003不一致,說明有沖突,則在X1對應(yīng)的Next指針中讀取到地址Y1,從Y1地址中讀取到Key為322900003,與查找的Key值一致,則取對應(yīng)的數(shù)據(jù)指針Z3,從Z3地址中讀取該條記錄。
當(dāng)發(fā)生再次沖突時,索引沖突區(qū)的Next指針可以指向下一個索引沖突區(qū)的地址,而“下一個索引沖突區(qū)”中的數(shù)據(jù)指針指向發(fā)生再次沖突的數(shù)據(jù)的內(nèi)存地址。
由以上實施例可見,本發(fā)明在數(shù)據(jù)庫訪問子系統(tǒng)和數(shù)據(jù)庫之間預(yù)先創(chuàng)建并維持一組長連接,當(dāng)前端應(yīng)用訪問數(shù)據(jù)庫時,前端應(yīng)用通過數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口建立與該子系統(tǒng)中數(shù)據(jù)庫訪問控制器間的短連接,該數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,實現(xiàn)前端應(yīng)用通過該長連接和所述短連接訪問數(shù)據(jù)庫,而由于一個長連接可以對應(yīng)數(shù)十個短連接,因此大大增加了可以接入的前端應(yīng)用的數(shù)量,并充分利用了保持的長連接。將靜態(tài)表填入共享內(nèi)存中,還可以實現(xiàn)對靜態(tài)表快速、高效的訪問。
雖然通過實施例描繪了本發(fā)明,本領(lǐng)域技術(shù)人員知道,本發(fā)明還有許多變形和變化而不脫離本發(fā)明的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本發(fā)明的精神。
權(quán)利要求
1.一種訪問數(shù)據(jù)庫的方法,其特征在于,數(shù)據(jù)庫與數(shù)據(jù)庫訪問子系統(tǒng)預(yù)先創(chuàng)建并維持一組長連接,當(dāng)前端應(yīng)用訪問數(shù)據(jù)庫時,包括前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口;數(shù)據(jù)庫訪問接口根據(jù)收到的數(shù)據(jù)庫訪問命令,建立與數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問控制器間的短連接,通過該短連接發(fā)送數(shù)據(jù)庫訪問命令;數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫;通過該長連接和所述建立的短連接返回數(shù)據(jù)庫訪問結(jié)果到前端應(yīng)用。
2.如權(quán)利要求1所述的方法,其特征在于,所述數(shù)據(jù)庫與數(shù)據(jù)庫訪問子系統(tǒng)預(yù)先創(chuàng)建并維持一組長連接由以下方式實現(xiàn)數(shù)據(jù)庫與數(shù)據(jù)庫訪問子系統(tǒng)間根據(jù)配置文件中設(shè)定的經(jīng)驗值預(yù)先創(chuàng)建并維持一組長連接。
3.如權(quán)利要求1所述的方法,其特征在于,所述前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問接口由以下方式實現(xiàn)前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口;由數(shù)據(jù)庫訪問接口中的應(yīng)用接口收到所述訪問命令,根據(jù)該訪問命令生成請求報文,并將該報文發(fā)送到第一通訊接口,該第一通訊接口位于數(shù)據(jù)庫訪問接口中。
4.如權(quán)利要求3所述的方法,其特征在于,所述數(shù)據(jù)庫訪問接口建立與數(shù)據(jù)庫訪問控制器間的短連接由以下方式實現(xiàn)所述第一通訊接口根據(jù)收到的請求報文建立與第二通訊接口的短連接,并通過該短連接發(fā)送請求報文到第二通訊接口,所述第二通訊接口位于數(shù)據(jù)庫訪問控制器中。
5.如權(quán)利要求4所述的方法,其特征在于,所述數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫由以下方式實現(xiàn)數(shù)據(jù)庫訪問控制器中的第二通訊接口根據(jù)從短連接收到的請求報文,發(fā)送數(shù)據(jù)庫訪問請求到數(shù)據(jù)庫訪問控制器中的數(shù)據(jù)庫服務(wù)接口;數(shù)據(jù)庫服務(wù)接口根據(jù)收到的訪問請求,選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫。
6.如權(quán)利要求1所述的方法,其特征在于,所述前端應(yīng)用通過長連接和短連接完成數(shù)據(jù)庫訪問后還包括釋放所述短連接,并歸還所述占用的長連接。
7.如權(quán)利要求1至6所述的方法,其特征在于,所述短連接為UNIX域套接字。
8.如權(quán)利要求1所述的方法,其特征在于,本方法還包括當(dāng)前端系統(tǒng)初始化時,將對應(yīng)的靜態(tài)表裝入數(shù)據(jù)庫側(cè)共享內(nèi)存中;前端應(yīng)用將讀取靜態(tài)表的操作改為讀取共享內(nèi)存;前端應(yīng)用通過操作共享內(nèi)存完成對靜態(tài)表的訪問。
9.如權(quán)利要求8所述的方法,其特征在于,共享內(nèi)存區(qū)建立數(shù)據(jù)存放區(qū)、索引區(qū)和索引沖突區(qū),其中索引區(qū)包括哈希值、關(guān)鍵值、數(shù)據(jù)指針和Next指針,索引沖突區(qū)包括關(guān)鍵值、數(shù)據(jù)指針和Next指針,靜態(tài)表中的一列值為關(guān)鍵值,所述將數(shù)據(jù)庫中的靜態(tài)表裝入數(shù)據(jù)庫側(cè)共享內(nèi)存中由以下方式實現(xiàn)計算靜態(tài)表需要的共享內(nèi)存容量,并申請該容量的共享內(nèi)存作為存儲該靜態(tài)表的數(shù)據(jù)存放區(qū);將所述靜態(tài)表載入所述數(shù)據(jù)存放區(qū);根據(jù)靜態(tài)表中記錄的關(guān)鍵值,使用哈希算法計算對應(yīng)的哈希值,當(dāng)所述哈希值與索引區(qū)已有的哈希值不沖突時,將所述哈希值和該記錄所在內(nèi)存的地址載入對應(yīng)索引區(qū)和數(shù)據(jù)指針中;當(dāng)所述哈希值與索引區(qū)已有的哈希值沖突時,將所述哈希值和該記錄所在內(nèi)存的地址載入對應(yīng)索引沖突區(qū)和數(shù)據(jù)指針中,并將所在索引沖突區(qū)的地址填入所述索引區(qū)的Next指針中。
10.如權(quán)利要求9所述的方法,其特征在于,所述當(dāng)所述哈希值與索引區(qū)已有的哈希值沖突時,將所述哈希值和該記錄所在內(nèi)存的地址載入對應(yīng)索引沖突區(qū)和數(shù)據(jù)指針中,而所述哈希值與索引沖突區(qū)發(fā)生再次發(fā)生沖突時,將該記錄的內(nèi)存地址載入索引沖突區(qū)的數(shù)據(jù)指針中。
11.如權(quán)利要求9所述的方法,其特征在于,所述前端應(yīng)用通過操作共享內(nèi)存完成對數(shù)據(jù)庫的靜態(tài)表的訪問由以下方式實現(xiàn)由查詢值利用哈希算法得到哈希值,在索引區(qū)中得到該哈希值對應(yīng)數(shù)據(jù)指針中的地址,如果該查詢值與所述地址中的記錄的關(guān)鍵值相同,則讀取記錄;如果該查詢值與所述地址中的記錄的關(guān)鍵值不相同,則到索引區(qū)Next指針指向的地址中讀取數(shù)據(jù)指針,從該數(shù)據(jù)指針指向的地址中讀取記錄。
12.一種訪問數(shù)據(jù)庫的系統(tǒng),其特征在于,該系統(tǒng)包括前端應(yīng)用、數(shù)據(jù)庫訪問子系統(tǒng)和數(shù)據(jù)庫,其中,數(shù)據(jù)庫訪問子系統(tǒng)中包括數(shù)據(jù)庫訪問接口和數(shù)據(jù)庫訪問控制器;前端應(yīng)用用于發(fā)起對數(shù)據(jù)庫的訪問;數(shù)據(jù)庫用于存儲數(shù)據(jù);數(shù)據(jù)庫訪問接口用于接收前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并解釋該命令,建立與數(shù)據(jù)庫訪問控制器之間的短連接,通過該短連接發(fā)送所述命令到數(shù)據(jù)庫訪問控制器;數(shù)據(jù)庫訪問控制器預(yù)先與數(shù)據(jù)庫之間維持一組長連接,用于當(dāng)收到訪問命令后,選取一個空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到數(shù)據(jù)庫返回的訪問結(jié)果。
13.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫訪問接口包括應(yīng)用接口和第一通訊接口,其中,應(yīng)用接口用于接收并解釋前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并將解釋后生成的請求報文發(fā)送到第一通訊接口;第一通訊接口用于收到請求報文后建立與第二通訊接口間的短連接,通過該短連接發(fā)送請求報文到第二通訊接口。
14.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫訪問控制器包括數(shù)據(jù)庫服務(wù)接口和第二通訊接口,其中,第二通訊接口與數(shù)據(jù)庫訪問接口相連,用于將收到的請求報文發(fā)送到數(shù)據(jù)庫訪問接口;數(shù)據(jù)庫服務(wù)接口用于收到請求報文后選取空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到訪問結(jié)果。
15.如權(quán)利要求12所述的系統(tǒng),其特征在于,還包括數(shù)據(jù)庫側(cè)的共享內(nèi)存,用于存儲靜態(tài)表并提供前端應(yīng)用讀取靜態(tài)表上數(shù)據(jù)。
16.如權(quán)利要求15所述的系統(tǒng),其特征在于,所述共享內(nèi)存包括數(shù)據(jù)存放區(qū)、索引區(qū)和索引沖突區(qū),其中,數(shù)據(jù)存放區(qū)用于存儲靜態(tài)表;索引區(qū)用于存放靜態(tài)表的哈希值、關(guān)鍵值、數(shù)據(jù)所在數(shù)據(jù)存放區(qū)的內(nèi)存地址和對應(yīng)索引沖突區(qū)的內(nèi)存地址;索引沖突區(qū)用于存放靜態(tài)表的關(guān)鍵值、數(shù)據(jù)所在數(shù)據(jù)存放區(qū)的內(nèi)存地址和對應(yīng)索引沖突區(qū)的內(nèi)存地址。
17.一種數(shù)據(jù)庫訪問子系統(tǒng),其特征在于,包括數(shù)據(jù)庫訪問接口和數(shù)據(jù)庫訪問控制器,其中,數(shù)據(jù)庫訪問接口用于接收前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并解釋該命令,建立與數(shù)據(jù)庫訪問控制器之間的短連接,通過該短連接發(fā)送所述命令到數(shù)據(jù)庫訪問控制器;數(shù)據(jù)庫訪問控制器預(yù)先與數(shù)據(jù)庫之間維持一組長連接,用于當(dāng)收到訪問命令后,選取一個空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到數(shù)據(jù)庫返回的訪問結(jié)果。
18.如權(quán)利要求17所述的子系統(tǒng),其特征在于,所述數(shù)據(jù)庫訪問接口包括應(yīng)用接口和第一通訊接口,其中,應(yīng)用接口用于接收并解釋前端應(yīng)用發(fā)來的數(shù)據(jù)庫訪問命令,并將解釋后生成的請求報文發(fā)送到第一通訊接口;第一通訊接口用于收到請求報文后建立與第二通訊接口間的短連接,通過該短連接發(fā)送請求報文到第二通訊接口。
19.如權(quán)利要求17所述的子系統(tǒng),其特征在于,所述數(shù)據(jù)庫訪問控制器包括數(shù)據(jù)庫服務(wù)接口和第二通訊接口,其中,第二通訊接口與數(shù)據(jù)庫訪問接口相連,用于將收到的請求報文發(fā)送到數(shù)據(jù)庫訪問接口;數(shù)據(jù)庫服務(wù)接口用于收到請求報文后選取空閑的長連接,通過該長連接訪問數(shù)據(jù)庫并得到訪問結(jié)果。
全文摘要
本發(fā)明公開了一種訪問數(shù)據(jù)庫的方法,應(yīng)用于銀行的交易處理過程中,數(shù)據(jù)庫與數(shù)據(jù)庫訪問子系統(tǒng)預(yù)先創(chuàng)建并維持一組長連接,當(dāng)前端應(yīng)用訪問數(shù)據(jù)庫時,所述方法包括步驟前端應(yīng)用發(fā)出數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問接口;數(shù)據(jù)庫訪問接口根據(jù)收到的數(shù)據(jù)庫訪問命令,建立與數(shù)據(jù)庫訪問子系統(tǒng)中的數(shù)據(jù)庫訪問控制器間的短連接,通過該短連接發(fā)送數(shù)據(jù)庫訪問命令;數(shù)據(jù)庫訪問控制器選取一個空閑的長連接,通過該長連接發(fā)送數(shù)據(jù)庫訪問命令到數(shù)據(jù)庫;通過該長連接和所述建立的短連接返回數(shù)據(jù)庫訪問結(jié)果到前端應(yīng)用。本發(fā)明還公開了一種訪問數(shù)據(jù)庫的系統(tǒng)。應(yīng)用本發(fā)明,可以增加訪問數(shù)據(jù)庫的前端應(yīng)用的數(shù)量,并充分利用了保持的長連接。
文檔編號G07F19/00GK1987864SQ200610156429
公開日2007年6月27日 申請日期2006年12月31日 優(yōu)先權(quán)日2006年12月31日
發(fā)明者杜永健, 王臻, 褚宇峰, 林志農(nóng), 周子堅, 鄭煒杰, 沙云 申請人:中國建設(shè)銀行股份有限公司