專利名稱:一種數(shù)據(jù)庫訪問的方法及數(shù)據(jù)庫映射系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)據(jù)庫技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)庫訪問的方法及數(shù)據(jù)庫映射系統(tǒng)。
背景技術(shù):
數(shù)據(jù)庫是指長期儲存在計算機內(nèi)的、有組織的、可共享的數(shù)據(jù)的集合,廣泛應(yīng)用于計算機、網(wǎng)絡(luò)通信等領(lǐng)域為各種用戶提供數(shù)據(jù)共享。目前,實現(xiàn)數(shù)據(jù)庫訪問的方法主要有兩種方法之一客戶端直接編輯標準的SQL語句(數(shù)據(jù)庫訪問語句),并將編輯后的SQL語句通過網(wǎng)絡(luò)傳輸至服務(wù)器端的數(shù)據(jù)庫系統(tǒng),服務(wù)器端的數(shù)據(jù)庫系統(tǒng)對接收到的SQL語句進行解釋、編譯、執(zhí)行,并將最終的執(zhí)行結(jié)果傳輸至客戶端。其中,服務(wù)器端和客戶端的數(shù)據(jù)傳輸協(xié)議可采用多種方式,如傳輸控制協(xié)議/網(wǎng)際互聯(lián)協(xié)議(Transmission Control Protocol/Internet Protocol,TCP/IP)、用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)、管道、七號信令等。
在上述數(shù)據(jù)庫訪問方法中,客戶端用戶通過網(wǎng)絡(luò)訪問服務(wù)器端的數(shù)據(jù)庫,使客戶端用戶訪問數(shù)據(jù)庫的速率受到網(wǎng)絡(luò)速率的限制,而只能達到十萬級別的數(shù)據(jù)庫訪問速率,無法滿足用戶對數(shù)據(jù)庫訪問的實時性的需求。
方法之二客戶端通過中間件來訪問服務(wù)器端的數(shù)據(jù)庫。中間件技術(shù)可以為客戶端用戶提供一些可以調(diào)用的固定接口,中間件根據(jù)客戶端用戶提供的關(guān)鍵字如表名、字段名等動態(tài)組裝成標準的SQL語句,并將組裝的SQL語句通過網(wǎng)絡(luò)傳輸至服務(wù)器端。
上述方法將客戶端用戶在訪問數(shù)據(jù)庫時,重新生成標準的SQL語句的操作交給中間件完成,簡化了客戶端用戶的數(shù)據(jù)庫訪問操作,但是通過網(wǎng)絡(luò)傳輸數(shù)據(jù)同樣會使數(shù)據(jù)庫的訪問速率受到網(wǎng)絡(luò)速率的限制,而只能達到十萬級別的數(shù)據(jù)庫訪問速率,同樣無法滿足用戶對數(shù)據(jù)庫訪問的實時性的需求。
發(fā)明內(nèi)容
本發(fā)明實施例的目的在于提供一種數(shù)據(jù)庫訪問的方法,旨在解決現(xiàn)有技術(shù)中,在訪問數(shù)據(jù)庫時,需要通過網(wǎng)絡(luò)在服務(wù)器端和客戶端傳輸數(shù)據(jù),從而使數(shù)據(jù)庫訪問速率受到網(wǎng)絡(luò)速率的限制,無法達到用戶對數(shù)據(jù)庫訪問的實時性的需求的問題。
本發(fā)明實施例是這樣實現(xiàn)的,一種數(shù)據(jù)庫訪問的方法,所述方法包括下述步驟根據(jù)服務(wù)器端數(shù)據(jù)庫中的每條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址;將所述服務(wù)器端數(shù)據(jù)庫中的每條記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中;通過直接訪問所述共享內(nèi)存來訪問所述服務(wù)器端數(shù)據(jù)庫。
本發(fā)明實施例的另一目的在于提供一種數(shù)據(jù)庫映射系統(tǒng),所述系統(tǒng)包括內(nèi)存映射地址計算模塊,用于根據(jù)服務(wù)器端數(shù)據(jù)庫中的每條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址;以及數(shù)據(jù)庫映射模塊,用于將所述服務(wù)器端數(shù)據(jù)庫中的每條記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中。
在本發(fā)明實施例中,通過將服務(wù)器端數(shù)據(jù)庫中的各條記錄映射至客戶端共享內(nèi)存中,從而使客戶端用戶不需要通過網(wǎng)絡(luò)訪問服務(wù)器端的數(shù)據(jù)庫,直接通過訪問客戶端共享內(nèi)存來訪問數(shù)據(jù)庫,使數(shù)據(jù)庫訪問不受網(wǎng)絡(luò)速率的限制,可以達到百萬級別的數(shù)據(jù)庫訪問速率,滿足用戶對數(shù)據(jù)庫訪問的實時性的需求。
圖1是本發(fā)明實施例提供的數(shù)據(jù)庫訪問的方法的實現(xiàn)流程圖;圖2是本發(fā)明實施例提供的數(shù)據(jù)庫訪問的方法的另一實現(xiàn)流程圖;圖3是本發(fā)明實施例提供的采用數(shù)據(jù)庫訪問方法查找記錄的實現(xiàn)流程圖;圖4是本發(fā)明實施例提供的數(shù)據(jù)庫映射系統(tǒng)的結(jié)構(gòu)圖。
具體實施例方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
在本發(fā)明實施例中,通過將服務(wù)器端的數(shù)據(jù)庫表映射到客戶端的共享內(nèi)存中,從而使客戶端用戶達到百萬級別的數(shù)據(jù)庫訪問速率,以滿足客戶端用戶對數(shù)據(jù)庫訪問的實時性的需求。
圖1示出了本發(fā)明實施例提供的數(shù)據(jù)庫訪問的方法的實現(xiàn)流程,詳述如下在步驟S101中,為服務(wù)器端數(shù)據(jù)庫中的每條記錄添加映射時間戳,以便當客戶端共享內(nèi)存的可用存儲空間有限,不能將服務(wù)器端數(shù)據(jù)庫中的所有記錄都映射至該共享內(nèi)存時,可以根據(jù)每條記錄映射至共享內(nèi)存的時間值淘汰部分映射至共享內(nèi)存的記錄。其中映射時間戳是數(shù)據(jù)庫中的每條記錄映射至共享內(nèi)存時的時間值。添加了映射時間戳之后的各單條記錄的結(jié)構(gòu)如下表所示
在步驟S102中,判斷客戶端共享內(nèi)存的空間是否已滿,如果客戶端共享內(nèi)存的空間已滿,則執(zhí)行步驟S103,否則執(zhí)行步驟S104。
在步驟S103中,淘汰映射至客戶端共享內(nèi)存中的映射時間戳較早的記錄。
在步驟S104中,根據(jù)服務(wù)器端數(shù)據(jù)庫中每條記錄的關(guān)鍵字段值按照預(yù)先配置的哈希函數(shù)(Hash函數(shù))計算該記錄對應(yīng)的內(nèi)存映射地址。其中哈希函數(shù)的通式是內(nèi)存映射地址=記錄中關(guān)鍵字段值MOD地址素數(shù),其中地址素數(shù)是為了得到更好的哈希函數(shù),用戶經(jīng)過多次試驗總結(jié)并配置的值(如5、7等)。例如當數(shù)據(jù)庫中存在關(guān)鍵字段值分別為8,10,14,15,18,23,20,34的記錄時,如果地址素數(shù)配置為5,經(jīng)上述哈希函數(shù)計算后,則具有上述關(guān)鍵字段值的記錄的內(nèi)存映射地址分別為3,0,4,0,3,3,0,4;如果地址素數(shù)配置為7,經(jīng)上述哈希函數(shù)計算后,則具有上述關(guān)鍵字段值的記錄的內(nèi)存映射地址分別為1,3,0,1,4,2,6,6。如上所述,具有不同的關(guān)鍵字段值的各個記錄,經(jīng)哈希函數(shù)計算后,可能得到相同的內(nèi)存映射地址,即一個內(nèi)存映射地址可能對應(yīng)復(fù)數(shù)個記錄。
在步驟S105中,將服務(wù)器端數(shù)據(jù)庫中的各記錄映射至客戶端共享內(nèi)存的相應(yīng)內(nèi)存映射地址中。經(jīng)映射后,數(shù)據(jù)庫在內(nèi)存存儲區(qū)的存儲結(jié)構(gòu)如下表所示
在本發(fā)明實施例中,對于具有相同內(nèi)存映射地址的各記錄,在映射至共享內(nèi)存中時,采用隊列對具有相同內(nèi)存映射地址的所有記錄進行管理,該隊列的長度可以預(yù)先設(shè)定,在本發(fā)明實施例中,以100為例進行說明。當具有相同內(nèi)存映射地址的記錄多于100條時,前100條記錄將映射到根據(jù)各記錄的關(guān)鍵字段值計算出來的共享內(nèi)存中對應(yīng)的內(nèi)存映射地址中,對于100條以后的具有相同內(nèi)存映射地址的記錄在被映射到共享內(nèi)存中時,采用線性探測的方法逐個探測下一個內(nèi)存映射地址是否空閑,如果空閑,則將該記錄映射到該空閑的內(nèi)存映射地址中。其中地址線性探測的個數(shù)由用戶預(yù)先設(shè)定。
在步驟S106中,直接通過訪問該共享內(nèi)存來訪問數(shù)據(jù)庫??蛻舳擞脩艨梢灾苯釉L問上述客戶端共享內(nèi)存來訪問映射至該共享內(nèi)存中的數(shù)據(jù)庫,從而可以達到百萬級別的數(shù)據(jù)庫訪問速率,而不受網(wǎng)絡(luò)速率的影響,滿足了用戶對數(shù)據(jù)庫訪問的實時性的需求。
圖2示出了本發(fā)明第二實施例提供的數(shù)據(jù)庫訪問的方法的實現(xiàn)流程,其與第一實施例的不同之處在于,對該方法步驟的執(zhí)行順序進行了調(diào)整。
在步驟S201中,根據(jù)服務(wù)器端數(shù)據(jù)庫中每條記錄的關(guān)鍵字段值按照預(yù)先配置的哈希函數(shù)計算該記錄對應(yīng)的內(nèi)存映射地址;在步驟S202中,為服務(wù)器端數(shù)據(jù)庫中的每條記錄添加映射時間戳;在步驟S203中,判斷客戶端共享內(nèi)存的空間是否已滿,如果客戶端共享內(nèi)存的空間已滿,則執(zhí)行步驟S204,否則執(zhí)行步驟S205;在步驟S204中,淘汰映射至客戶端共享內(nèi)存中的映射時間戳較早的記錄;在步驟S205中,將服務(wù)器端數(shù)據(jù)庫中的各記錄映射至客戶端共享內(nèi)存的相應(yīng)內(nèi)存映射地址中,在步驟S206中,直接通過訪問該共享內(nèi)存來訪問數(shù)據(jù)庫。
圖3示出了本發(fā)明實施例提供的采用數(shù)據(jù)庫訪問方法查找記錄的流程。
在步驟S301中,接收輸入的記錄的關(guān)鍵字段值。當采用上述數(shù)據(jù)庫訪問方法將服務(wù)器端數(shù)據(jù)庫中的所有記錄映射至客戶端共享內(nèi)存中后,接收客戶端用戶輸入的記錄的關(guān)鍵字段值。
在步驟S302中,根據(jù)該關(guān)鍵字段值采用上述配置的哈希函數(shù)計算該記錄對應(yīng)的內(nèi)存映射地址。
在步驟S303中,判斷計算出來的內(nèi)存映射地址中是否存在與該記錄的關(guān)鍵字段值相同的記錄,如果不存在,則執(zhí)行步驟S304,如果存在,則執(zhí)行步驟S307。
在步驟S304中,判斷探測的地址數(shù)是否超過預(yù)先設(shè)定的值。由于在將服務(wù)器端數(shù)據(jù)庫中的各條記錄映射至客戶端共享內(nèi)存時,對于具有不同的字段關(guān)鍵值的復(fù)數(shù)個記錄經(jīng)哈希函數(shù)計算,可能得到相同的內(nèi)存映射地址,在配置時已經(jīng)限定了同一個內(nèi)存映射地址對應(yīng)的記錄的條數(shù),對于多于限定值的具有相同內(nèi)存映射地址的記錄,采用地址線性探測的方式,將該多于限定值的記錄填充到下一個內(nèi)存映射地址。而在進行地址線性探測時,用戶也預(yù)先配置了地址線性探測的地址數(shù),所以在此步驟中,需要判斷當前探測的地址的個數(shù)是否超出預(yù)先配置的地址數(shù),如果沒有超出,則執(zhí)行步驟S305,如果超出,則執(zhí)行步驟S306。
在步驟S305中,將探測地址增加1后,重新執(zhí)行步驟S303。
在步驟S306中,停止地址探測并返回未查到該記錄對應(yīng)的內(nèi)存映射地址以及未查找到該記錄的結(jié)果。
在步驟S307中,返回查找到的記錄的內(nèi)存映射地址,向客戶端用戶返回查找到的記錄。
圖4示出了本發(fā)明實施例提供的數(shù)據(jù)庫映射系統(tǒng)的結(jié)構(gòu),為了便于說明,僅示出與本發(fā)明實施例相關(guān)的部分。
內(nèi)存映射地址計算模塊31根據(jù)數(shù)據(jù)庫中各記錄的關(guān)鍵字段值采用預(yù)先配置的哈希函數(shù)計算該記錄映射到共享內(nèi)存中的內(nèi)存映射地址。數(shù)據(jù)庫映射模塊32將數(shù)據(jù)庫中的各條記錄映射到由內(nèi)存映射地址計算模塊31計算得出的客戶端共享內(nèi)存的內(nèi)存映射地址中,服務(wù)器端的數(shù)據(jù)庫映射至客戶端共享內(nèi)存中后,各記錄在客戶端共享內(nèi)存存儲區(qū)的存儲結(jié)構(gòu)如上所述,在此不再贅述。
在將服務(wù)器端數(shù)據(jù)庫中的各個記錄映射至客戶端共享內(nèi)存的過程中,當客戶端共享內(nèi)存的可用空間有限,無法將服務(wù)器端數(shù)據(jù)庫中的每個記錄都映射至客戶端共享內(nèi)存時,本發(fā)明實施例提供的數(shù)據(jù)庫映射系統(tǒng)通過映射時間戳添加模塊33為服務(wù)器端數(shù)據(jù)庫中的每個記錄添加相應(yīng)的映射時間戳,用以標識該記錄映射至客戶端共享內(nèi)存時的時間。其中添加了映射時間戳之后的各記錄的結(jié)構(gòu)如上所述,在此不再贅述。內(nèi)存空間判斷模塊34在將服務(wù)器端數(shù)據(jù)庫中的各條記錄映射至客戶端共享內(nèi)存前,判斷該共享內(nèi)存是否已滿。當該共享內(nèi)存的可用空間有限,無法將數(shù)據(jù)庫中的所有記錄都映射至該共享內(nèi)存時,即該共享內(nèi)存已滿,則通過記錄淘汰模塊35淘汰映射時間戳較早的記錄,以使數(shù)據(jù)庫中的其它記錄能夠映射至該共享內(nèi)存,客戶端用戶可以直接通過訪問客戶端的共享內(nèi)存來訪問數(shù)據(jù)庫,從而可以達到百萬級別的數(shù)據(jù)庫訪問速率,而不受網(wǎng)絡(luò)速率的限制,滿足了客戶端用戶對數(shù)據(jù)庫訪問的實時性的需求。
綜上所述,在本發(fā)明實施例中,通過將服務(wù)器端數(shù)據(jù)庫中的每條記錄映射至客戶端共享內(nèi)存中,當客戶端需要訪問服務(wù)器端的數(shù)據(jù)庫時,可以直接訪問映射至客戶端共享內(nèi)存中數(shù)據(jù)庫,使數(shù)據(jù)庫訪問不受網(wǎng)絡(luò)速率的限制,從而可以達到百萬級別的數(shù)據(jù)庫訪問速率,滿足了客戶端用戶對數(shù)據(jù)庫訪問的實時性的需求。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。
權(quán)利要求
1.一種數(shù)據(jù)庫訪問的方法,其特征在于,所述方法包括下述步驟根據(jù)服務(wù)器端數(shù)據(jù)庫中的每條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址;將所述服務(wù)器端數(shù)據(jù)庫中的每條記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中;通過直接訪問所述共享內(nèi)存來訪問所述服務(wù)器端數(shù)據(jù)庫。
2.如權(quán)利要求1所述的數(shù)據(jù)庫訪問的方法,其特征在于,在所述根據(jù)服務(wù)器端數(shù)據(jù)庫中的各條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址的步驟之前,所述方法還包括下述步驟為所述服務(wù)器端數(shù)據(jù)庫中的每條記錄添加映射時間戳;判斷所述客戶端共享內(nèi)存是否已滿,如果所述客戶端共享內(nèi)存已滿,則淘汰所述客戶端共享內(nèi)存中的所述映射時間戳最早的記錄。
3.如權(quán)利要求1所述的數(shù)據(jù)庫訪問的方法,其特征在于,在所述將所述服務(wù)器端數(shù)據(jù)庫中的每條記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中的步驟之前,所述方法還包括下述步驟為所述服務(wù)器端數(shù)據(jù)庫中的每條記錄添加映射時間戳;判斷所述客戶端共享內(nèi)存是否已滿,如果所述客戶端共享內(nèi)存已滿,則淘汰所述客戶端共享內(nèi)存中的所述映射時間戳最早的記錄。
4.如權(quán)利要求1或2或3所述的數(shù)據(jù)庫訪問的方法,其特征在于,在所述根據(jù)服務(wù)器端數(shù)據(jù)庫中的每條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址的步驟中,采用哈希函數(shù)計算所述記錄的內(nèi)存映射地址。
5.如權(quán)利要求1或2或3所述的數(shù)據(jù)庫訪問的方法,其特征在于,當根據(jù)服務(wù)器端數(shù)據(jù)庫中的每條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址時,如果有復(fù)數(shù)個記錄的內(nèi)存映射地址相同,則在將所述記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中時,采用隊列對所述具有相同內(nèi)存映射地址的復(fù)數(shù)個記錄進行管理。
6.一種數(shù)據(jù)庫映射系統(tǒng),其特征在于,所述系統(tǒng)包括內(nèi)存映射地址計算模塊,用于根據(jù)服務(wù)器端數(shù)據(jù)庫中的每條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址;以及數(shù)據(jù)庫映射模塊,用于將所述服務(wù)器端數(shù)據(jù)庫中的每條記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中。
7.如權(quán)利要求6所述的數(shù)據(jù)庫映射系統(tǒng),其特征在于,所述系統(tǒng)進一步包括下述步驟映射時間戳添加模塊,用于為所述服務(wù)器端數(shù)據(jù)庫中的每條記錄添加映射時間戳;內(nèi)存空間判斷模塊,用于判斷所述客戶端共享內(nèi)存是否已滿;以及記錄淘汰模塊,用于淘汰所述客戶端共享內(nèi)存中的所述映射時間戳最早的記錄。
8.如權(quán)利要求6或7所述的數(shù)據(jù)庫映射系統(tǒng),其特征在于,所述內(nèi)存映射地址計算模塊采用哈希函數(shù)計算所述記錄的內(nèi)存映射地址。
9.如權(quán)利要求6或7所述的數(shù)據(jù)庫映射系統(tǒng),其特征在于,當有復(fù)數(shù)個記錄的內(nèi)存映射地址相同,則在將所述記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中時,采用隊列對所述具有相同內(nèi)存映射地址的復(fù)數(shù)個記錄進行管理。
全文摘要
本發(fā)明適用于數(shù)據(jù)庫技術(shù)領(lǐng)域,提供了一種數(shù)據(jù)庫訪問的方法及數(shù)據(jù)庫映射系統(tǒng),所述方法包括下述步驟根據(jù)服務(wù)器端數(shù)據(jù)庫中的每條記錄的關(guān)鍵字段值計算所述記錄的內(nèi)存映射地址;將所述服務(wù)器端數(shù)據(jù)庫中的每條記錄映射至客戶端共享內(nèi)存的所述內(nèi)存映射地址中;通過直接訪問所述共享內(nèi)存來訪問所述服務(wù)器端數(shù)據(jù)庫。在本發(fā)明實施例中,通過將服務(wù)器端數(shù)據(jù)庫中的各條記錄映射至客戶端共享內(nèi)存,從而可以通過直接訪問共享內(nèi)存來訪問數(shù)據(jù)庫,而不受網(wǎng)絡(luò)速率的限制,可以達到百萬級別的數(shù)據(jù)庫訪問速率,以滿足用戶對數(shù)據(jù)庫訪問的實時性的需求。
文檔編號H04L12/00GK101082928SQ20071007616
公開日2007年12月5日 申請日期2007年6月25日 優(yōu)先權(quán)日2007年6月25日
發(fā)明者華有為 申請人:騰訊科技(深圳)有限公司