實現(xiàn)數(shù)據(jù)庫實時操作的方法和設(shè)備的制作方法
【專利摘要】本發(fā)明的一方面提供了一種實現(xiàn)數(shù)據(jù)庫實時操作的方法。該方法包括:在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫;響應(yīng)于對所述數(shù)據(jù)庫的操作的請求,從所述操作系統(tǒng)共享內(nèi)存中確定所述操作所針對的內(nèi)存塊;對確定的內(nèi)存塊進行操作。通過在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫,本發(fā)明的方法可以有效保障對數(shù)據(jù)庫的“實時性操作”。進一步地,也減少了在對數(shù)據(jù)庫實時操作過程所占用的系統(tǒng)資源。此外,本發(fā)明的另一方面提供了一種實現(xiàn)數(shù)據(jù)庫實時操作的設(shè)備,例如,服務(wù)器上安裝的軟件。
【專利說明】實現(xiàn)數(shù)據(jù)庫實時操作的方法和設(shè)備
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的實施方式涉及數(shù)據(jù)庫領(lǐng)域,更具體地,本發(fā)明的實施方式涉及實現(xiàn)數(shù)據(jù)庫實時操作的方法和設(shè)備。
【背景技術(shù)】
[0002]本部分旨在為權(quán)利要求書中陳述的本發(fā)明的實施方式提供背景或上下文。此處的描述可包括可以探究的概念,但不一定是之前已經(jīng)想到或者已經(jīng)探究的概念。因此,除非在此指出,否則在本部分中描述的內(nèi)容對于本申請的說明書和權(quán)利要求書而言不是現(xiàn)有技術(shù),并且并不因為包括在本部分中就承認是現(xiàn)有技術(shù)。
[0003]在一個典型的實時報價應(yīng)用系統(tǒng),如股票行情系統(tǒng)中,位于客戶端的用戶希望查看到最新的價格數(shù)據(jù)。在這樣的系統(tǒng)中,需要用一個數(shù)據(jù)庫存儲價格數(shù)據(jù)。同時,還需要實現(xiàn)對價格數(shù)據(jù)的“實時性操作”。
[0004]所謂的“實時性操作” 一般是指,快速地將最新的價格數(shù)據(jù)寫入數(shù)據(jù)庫中以替換舊的價格數(shù)據(jù),以及快速地將價格數(shù)據(jù)從數(shù)據(jù)庫中讀取出來提供給客戶端,使得讀取的數(shù)據(jù)與寫入的數(shù)據(jù)之間最匹配。
[0005]在現(xiàn)有技術(shù)中,已經(jīng)出現(xiàn)一些類型的數(shù)據(jù)庫。如,關(guān)系型數(shù)據(jù)庫和內(nèi)存數(shù)據(jù)庫。其中,關(guān)系型數(shù)據(jù)庫是將數(shù)據(jù)保存在磁盤上進行操作的數(shù)據(jù)庫,而內(nèi)存數(shù)據(jù)庫是將數(shù)據(jù)保存在內(nèi)存中進行操作的數(shù)據(jù)庫。
【發(fā)明內(nèi)容】
[0006]但是,本發(fā)明人在研究過程中發(fā)現(xiàn),在現(xiàn)有技術(shù)中,無論是關(guān)系型數(shù)據(jù)庫,還是內(nèi)存數(shù)據(jù)庫,對于寫入進程和讀取進程而言,都需要有自己的一個內(nèi)存空間。當(dāng)寫入進程寫入數(shù)據(jù)時,是將數(shù)據(jù)從自己的內(nèi)存空間中轉(zhuǎn)移到內(nèi)存或磁盤中,當(dāng)讀取進程讀取數(shù)據(jù)時,是將數(shù)據(jù)從內(nèi)存或磁盤中轉(zhuǎn)移到自己的內(nèi)存空間中。
[0007]因此依照現(xiàn)有技術(shù),當(dāng)對上述數(shù)據(jù)庫進行操作時,由于需要經(jīng)歷數(shù)據(jù)的轉(zhuǎn)移過程,即,數(shù)據(jù)從內(nèi)存空間轉(zhuǎn)移到內(nèi)存或磁盤的過程,以及數(shù)據(jù)從內(nèi)存或磁盤轉(zhuǎn)移到內(nèi)存空間的過程,而轉(zhuǎn)移過程本身需要占用一定時間,因此,無法有效保障“實時性操作”要求。
[0008]另外,轉(zhuǎn)移過程中所使用的內(nèi)存空間也會占用系統(tǒng)資源。
[0009]為此,非常需要一種改進的實現(xiàn)數(shù)據(jù)庫實時操作的方法和設(shè)備,以解決現(xiàn)有技術(shù)中對數(shù)據(jù)庫的操作無法有效保障“實時性操作”這一技術(shù)問題。進一步地,也需要減少在對數(shù)據(jù)庫實時操作過程所占用的系統(tǒng)資源。
[0010]在本上下文中,本發(fā)明的實施方式期望提供一種實現(xiàn)數(shù)據(jù)庫實時操作的方法和設(shè)備。
[0011]在本發(fā)明實施方式的第一方面中,提供了一種實現(xiàn)數(shù)據(jù)庫實時操作的方法,包括:在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫;響應(yīng)于對所述數(shù)據(jù)庫的操作的請求,從所述操作系統(tǒng)共享內(nèi)存中確定所述操作所針對的內(nèi)存塊;對確定的內(nèi)存塊進行操作。[0012]優(yōu)選地,所述操作包括寫入數(shù)據(jù)操作和讀取數(shù)據(jù)操作。
[0013]優(yōu)選地,所述方法還包括:將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的磁盤中。
[0014]優(yōu)選地,所述方法還包括:將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的操作系統(tǒng)內(nèi)存文件中。
[0015]優(yōu)選地,用于創(chuàng)建所述數(shù)據(jù)庫的所述操作系統(tǒng)共享內(nèi)存的內(nèi)存地址在運行期間不被操作系統(tǒng)釋放且回收。
[0016]優(yōu)選地,所述方法還包括:當(dāng)所述操作系統(tǒng)共享內(nèi)存中被占用的內(nèi)存塊空閑時,將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中。
[0017]優(yōu)選地,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊可以被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0018]優(yōu)選地,當(dāng)所述預(yù)設(shè)列表中的內(nèi)存地址的個數(shù)大于或者等于2時,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊才被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0019]優(yōu)選地,所述將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中包括:根據(jù)內(nèi)存塊的大小,將內(nèi)存塊對應(yīng)的內(nèi)存地址放入到相應(yīng)的預(yù)設(shè)列表中,使得大小相同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到同一個預(yù)設(shè)列表中,大小不同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到不同的預(yù)設(shè)列表中。
[0020]優(yōu)選地,所述對確定的內(nèi)存塊進行操作包括:按照HashMap數(shù)據(jù)結(jié)構(gòu)對確定的內(nèi)存塊進行操作。
[0021]優(yōu)選地,當(dāng)所述操作為寫入數(shù)據(jù)操作時,使用單線程將數(shù)據(jù)寫入到確定的內(nèi)存塊中。
[0022]優(yōu)選地,當(dāng)所述操作為讀取數(shù)據(jù)操作時,可以使用多線程從確定的內(nèi)存塊中讀取數(shù)據(jù)。
[0023]在本發(fā)明實施方式的第二方面中,提供了一種實現(xiàn)數(shù)據(jù)庫實時操作的設(shè)備,包括:數(shù)據(jù)庫創(chuàng)建單元,用于在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫;內(nèi)存塊確定單元,用于響應(yīng)于對所述數(shù)據(jù)庫的操作的請求,從所述操作系統(tǒng)共享內(nèi)存中確定所述操作請求所針對的內(nèi)存塊;操作單元,用于對確定的內(nèi)存塊進行操作。
[0024]優(yōu)選地,所述操作包括寫入數(shù)據(jù)操作和讀取數(shù)據(jù)操作。
[0025]優(yōu)選地,所述設(shè)備還包括:第一映射單元,用于將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的磁盤中。
[0026]優(yōu)選地,所述設(shè)備還包括:第二映射單元,用于將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的操作系統(tǒng)內(nèi)存文件中。
[0027]優(yōu)選地,用于創(chuàng)建所述數(shù)據(jù)庫的所述操作系統(tǒng)共享內(nèi)存的內(nèi)存地址在運行期間不被操作系統(tǒng)釋放且回收。
[0028]優(yōu)選地,所述設(shè)備還包括:內(nèi)存塊管理單元,用于當(dāng)所述操作系統(tǒng)共享內(nèi)存中被占用的內(nèi)存塊空閑時,將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中。
[0029]優(yōu)選地,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊可以被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0030]優(yōu)選地,當(dāng)所述預(yù)設(shè)列表中的內(nèi)存地址的個數(shù)大于或者等于2時,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊才被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0031]優(yōu)選地,所述內(nèi)存塊管理單元配置為:根據(jù)內(nèi)存塊的大小,將內(nèi)存塊對應(yīng)的內(nèi)存地址放入到相應(yīng)的預(yù)設(shè)列表中,使得大小相同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到同一個預(yù)設(shè)列表中,大小不同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到不同的預(yù)設(shè)列表中。
[0032]優(yōu)選地,所述操作單元配置為:按照HashMap數(shù)據(jù)結(jié)構(gòu)對確定的內(nèi)存塊進行操作。
[0033]優(yōu)選地,當(dāng)所述操作為寫入數(shù)據(jù)操作時,所述操作單元配置為:使用單線程將數(shù)據(jù)寫入到確定的內(nèi)存塊中。
[0034]優(yōu)選地,當(dāng)所述操作為讀取數(shù)據(jù)操作時,所述操作單元具體配置為:可以使用多線程從確定的內(nèi)存塊中讀取數(shù)據(jù)。
[0035]在本發(fā)明實施方式中,由于數(shù)據(jù)庫是在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建的,因此,寫入進程和讀取進程可以像對本機內(nèi)存進行操作一樣直接對數(shù)據(jù)庫進行操作,而無需進行數(shù)據(jù)轉(zhuǎn)移,從而可以節(jié)約因數(shù)據(jù)轉(zhuǎn)移過程而消耗的時間以及系統(tǒng)資源,進而有效地保障對數(shù)據(jù)庫的“實時性操作”要求。
[0036]另外,通過預(yù)設(shè)列表對空閑的內(nèi)存塊進行回收和重用,不僅避免了內(nèi)存碎片的產(chǎn)生,而且還達到了內(nèi)存塊可控的目的。
[0037]還另外,采用無鎖的方式避免讀寫沖突,簡化了系統(tǒng)架構(gòu),大大提高了系統(tǒng)性能。
【專利附圖】
【附圖說明】
[0038]通過參考附圖閱讀下文的詳細描述,本發(fā)明示例性實施方式的上述以及其他目的、特征和優(yōu)點將變得易于理解。在附圖中,以示例性而非限制性的方式示出了本發(fā)明的若干實施方式,其中:
[0039]圖1示出了適于實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)的框圖;
[0040]圖2示意性地示出了本發(fā)明的實施方式的一個示例性應(yīng)用場景;
[0041]圖3示意性地示出了根據(jù)本發(fā)明的實施方式的實現(xiàn)數(shù)據(jù)庫實時操作的方法的流程圖;
[0042]圖4示出了根據(jù)本發(fā)明一個實施方式的內(nèi)存塊管理的示意圖;
[0043]圖5示出了根據(jù)本發(fā)明一個實施方式的預(yù)設(shè)列表的示意圖;
[0044]圖6示出了根據(jù)本發(fā)明一個實施方式的HashMap數(shù)據(jù)結(jié)構(gòu)的示意圖;
[0045]圖7示意性地示出了根據(jù)本發(fā)明一個實施方式的設(shè)備的結(jié)構(gòu)框架圖。
[0046]在附圖中,相同或?qū)?yīng)的標(biāo)號表不相同或?qū)?yīng)的部分。
【具體實施方式】
[0047]下面將參考若干示例性實施方式來描述本發(fā)明的原理和精神。應(yīng)當(dāng)理解,給出這些實施方式僅僅是為了使本領(lǐng)域技術(shù)人員能夠更好地理解進而實現(xiàn)本發(fā)明,而并非以任何方式限制本發(fā)明的范圍。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整地傳達給本領(lǐng)域的技術(shù)人員。
[0048]圖1示出了適于實現(xiàn)本發(fā)明實施方式的示例性計算系統(tǒng)100的框圖。如圖1所示,計算系統(tǒng)100可以包括:中央處理單元(CPU) 101、隨機存取存儲器(RAM) 102、只讀存儲器(ROM) 103、系統(tǒng)總線104、硬盤控制器105、鍵盤控制器106、串行接口控制器107、并行接口控制器108、顯示控制器109、硬盤110、鍵盤111、串行外部設(shè)備112、并行外部設(shè)備113和顯示器114。這些設(shè)備中,與系統(tǒng)總線104耦合的有CPU101、RAM102、R0M103、硬盤控制器105、鍵盤控制器106、串行接口控制器107、并行接口控制器108和顯示控制器109。硬盤110與硬盤控制器105耦合,鍵盤111與鍵盤控制器106耦合,串行外部設(shè)備112與串行接口控制器107耦合,并行外部設(shè)備113與并行接口控制器108耦合,以及顯示器114與顯示控制器109耦合。應(yīng)當(dāng)理解,圖1所述的結(jié)構(gòu)框圖僅僅是為了示例的目的,而不是對本發(fā)明范圍的限制。在某些情況下,可以根據(jù)具體情況增加或減少某些設(shè)備。
[0049]本領(lǐng)域技術(shù)技術(shù)人員知道,本發(fā)明的實施方式可以實現(xiàn)為一種系統(tǒng)、方法或計算機程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即:完全的硬件、完全的軟件(包括固件、駐留軟件、微代碼等),或者硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明還可以實現(xiàn)為在一個或多個計算機可讀介質(zhì)中的計算機程序產(chǎn)品的形式,該計算機可讀介質(zhì)中包含計算機可讀的程序代碼。
[0050]可以采用一個或多個計算機可讀的介質(zhì)的任意組合。計算機可讀介質(zhì)可以是計算機可讀信號介質(zhì)或者計算機可讀存儲介質(zhì)。計算機可讀存儲介質(zhì)例如可以是,但不限于,電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉示例)例如可以包括:具有一個或多個導(dǎo)線的電連接、便攜式計算機磁盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0051]計算機可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括但不限于電磁信號、光信號或上述的任意合適的組合。計算機可讀的信號介質(zhì)還可以是計算機可讀存儲介質(zhì)以外的任何計算機可讀介質(zhì),該計算機可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0052]計算機可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括但不限于無線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0053]可以以一種或多種程序設(shè)計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言一諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計語言一諸如“C”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務(wù)器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡(luò)(包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN))連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0054]下面將參照本發(fā)明實施例的方法的流程圖和設(shè)備(或系統(tǒng))的框圖描述本發(fā)明的實施方式。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合都可以由計算機程序指令實現(xiàn)。這些計算機程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,這些計算機程序指令通過計算機或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
[0055]也可以把這些計算機程序指令存儲在能使得計算機或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機可讀介質(zhì)中,這樣,存儲在計算機可讀介質(zhì)中的指令就產(chǎn)生出一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置的產(chǎn)品。
[0056]也可以把計算機程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而使得在計算機或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。
[0057]根據(jù)本發(fā)明的實施方式,提出了一種實現(xiàn)數(shù)據(jù)庫實時操作的方法和設(shè)備。
[0058]在本文中,需要理解的是,附圖中的任何元素數(shù)量均用于示例而非限制,以及任何命名都僅用于區(qū)分,而不具有任何限制含義。
[0059]下面參考本發(fā)明的若干代表性實施方式,詳細闡釋本發(fā)明的原理和精神。
[0060]發(fā)明概沭
[0061]本發(fā)明人發(fā)現(xiàn),由于在對現(xiàn)有技術(shù)中的關(guān)系型數(shù)據(jù)庫和內(nèi)存數(shù)據(jù)庫進行操作,對于寫入進程和讀取進程而言,都需要有自己的一個內(nèi)存空間,當(dāng)寫入進程寫入數(shù)據(jù)時,是將數(shù)據(jù)從自己的內(nèi)存空間中轉(zhuǎn)移到內(nèi)存或磁盤中,當(dāng)讀取進程讀取數(shù)據(jù)時,是將數(shù)據(jù)從內(nèi)存或磁盤中轉(zhuǎn)移到自己的內(nèi)存空間中,因此,必須經(jīng)歷多次數(shù)據(jù)轉(zhuǎn)移過程才能完成對數(shù)據(jù)庫的操作。而數(shù)據(jù)轉(zhuǎn)移過程本身又需要占用一定時間,這樣的話,勢必會影響對數(shù)據(jù)庫的實時操作,進而無法有效保障對數(shù)據(jù)庫的“實時性操作”要求。
[0062]另外,數(shù)據(jù)轉(zhuǎn)移過程中所使用的內(nèi)存空間也會占用系統(tǒng)資源。如果在對數(shù)據(jù)庫進行操作時可以減少或者甚至避免數(shù)據(jù)轉(zhuǎn)移過程,就可以節(jié)約因數(shù)據(jù)轉(zhuǎn)移過程而消耗的時間以及系統(tǒng)資源,進而有效地保障對數(shù)據(jù)庫的“實時性操作”要求。
[0063]在介紹了本發(fā)明的基本原理之后,下面具體介紹本發(fā)明的各種非限制性實施方式。
[0064]應(yīng)用場景總覽
[0065]首先參考圖2,圖2示意性地示出了本發(fā)明的實施方式的一個示例性應(yīng)用場景。其中,在服務(wù)器20的操作系統(tǒng)共享內(nèi)存上創(chuàng)建有數(shù)據(jù)庫201,服務(wù)器20上的讀取進程21響應(yīng)于用戶的請求,從數(shù)據(jù)庫201中讀取已有的數(shù)據(jù),提供給用戶。而服務(wù)器20上的寫入進程22向數(shù)據(jù)庫201寫入最新的數(shù)據(jù)。服務(wù)器20可以是Web服務(wù)器,也可以是其他類型的服務(wù)器,例如APP服務(wù)器。本領(lǐng)域技術(shù)人員可以理解,圖2所示的示意圖僅是本發(fā)明的實施方式可以在其中得以實現(xiàn)的一個示例。本發(fā)明實施方式的適用范圍不受到該框架任何方面的限制。
[0066]示例性方法
[0067]下面結(jié)合圖2的應(yīng)用場景,參考圖3來描述根據(jù)本發(fā)明示例性實施方式的、用于實現(xiàn)數(shù)據(jù)庫實時操作的方法。需要注意的是,上述應(yīng)用場景僅是為了便于理解本發(fā)明的精神和原理而示出,本發(fā)明的實施方式在此方面不受任何限制。相反,本發(fā)明的實施方式可以應(yīng)用于適用的任何場景。
[0068]請參閱圖3,其示意性地示出了根據(jù)本發(fā)明的實施方式的實現(xiàn)數(shù)據(jù)庫實時操作的方法的流程圖,方法具體例如可以包括:
[0069]步驟301:在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫。
[0070]其中,共享內(nèi)存是主流操作系統(tǒng)(如,Linux、Unix和Windows操作系統(tǒng))都支持的一種系統(tǒng)底層機制,如果在共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫,對于服務(wù)器上的數(shù)據(jù)寫入進程和數(shù)據(jù)讀取進程來說,當(dāng)對位于共享內(nèi)存的數(shù)據(jù)庫進行操作時,無需額外的內(nèi)存空間。也就是說,當(dāng)寫入進程寫入數(shù)據(jù)時,直接將數(shù)據(jù)寫入到共享內(nèi)存的數(shù)據(jù)庫中,當(dāng)讀取進程讀取數(shù)據(jù)時,也是直接從共享內(nèi)存的數(shù)據(jù)庫中讀取數(shù)據(jù)。
[0071]根據(jù)本發(fā)明的實施方式,首先,由寫入進程初始化數(shù)據(jù)庫。當(dāng)進行數(shù)據(jù)庫初始化時,寫入進程首先會通過向操作系統(tǒng)發(fā)送mmap系統(tǒng)調(diào)用請求來申請操作系統(tǒng)共享內(nèi)存,該操作系統(tǒng)共享內(nèi)存可容納所有的數(shù)據(jù)。
[0072]另外,數(shù)據(jù)以鍵值對(key-value)的方式存儲于數(shù)據(jù)庫中,key和value都為字符串類型,如,股票代碼600100存儲于數(shù)據(jù)庫中內(nèi)容為:{"symbol": "600100","price":8.0,"high":8.03, "low": 7.79, "time": "2013/08/1215:03:05"...}。其中 symbol、price、high、low、time 為鍵,而 600100、8.0、8.03,7.79,2013/08/1215:03:05 為鍵 symbol,price,high,low、time 的值。
[0073]步驟302:響應(yīng)于對所述數(shù)據(jù)庫的操作的請求,從所述操作系統(tǒng)共享內(nèi)存中確定所述操作所針對的內(nèi)存塊。
[0074]步驟303:對確定的內(nèi)存塊進行操作。
[0075]根據(jù)本發(fā)明的一個實施方式,所述操作包括寫入數(shù)據(jù)操作和讀取數(shù)據(jù)操作。
[0076]例如,參考圖2所示,用戶向服務(wù)器20發(fā)送對數(shù)據(jù)庫201的讀取數(shù)據(jù)操作的請求,服務(wù)器20上的讀取進程21響應(yīng)于該讀取數(shù)據(jù)操作的請求,從操作系統(tǒng)共享內(nèi)存中確定該讀取數(shù)據(jù)操作所針對的內(nèi)存塊,并進一步對確定的內(nèi)存塊進行讀取數(shù)據(jù)操作。或者,服務(wù)器20上的寫入進程22響應(yīng)于寫入數(shù)據(jù)操作的請求,從操作系統(tǒng)共享內(nèi)存中確定該寫入數(shù)據(jù)操作所針對的內(nèi)存塊,并進一步對確定的內(nèi)存塊進行數(shù)據(jù)寫入操作。
[0077]在操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫,數(shù)據(jù)是暫時保存在共享內(nèi)存中的,一旦重啟操作系統(tǒng),數(shù)據(jù)庫中的數(shù)據(jù)就會丟失。因此,根據(jù)該實施方式,在解決了現(xiàn)有技術(shù)中服務(wù)器對數(shù)據(jù)庫的操作無法有效保障“實時性操作”,以及,解決了數(shù)據(jù)庫實時操作過程耗費系統(tǒng)資源的問題的同時,也存在數(shù)據(jù)不穩(wěn)定的問題。
[0078]為了進一步解決數(shù)據(jù)不穩(wěn)定的問題,根據(jù)第一種優(yōu)選方式,方法還包括:將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的磁盤中。
[0079]這樣,數(shù)據(jù)永久性地保存在磁盤中,即使因重啟操作系統(tǒng)而導(dǎo)致數(shù)據(jù)庫中的數(shù)據(jù)丟失,也可以再從磁盤中找到并恢復(fù)丟失的數(shù)據(jù)。
[0080]在具體實施時,是由操作系統(tǒng)控制將操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到服務(wù)器上的磁盤中。例如,每當(dāng)共享內(nèi)存中的數(shù)據(jù)達到某一個數(shù)據(jù)量時,操作系統(tǒng)就會自動將數(shù)據(jù)映射到服務(wù)器上的磁盤中。但是,根據(jù)該方案,操作系統(tǒng)進行數(shù)據(jù)映射的頻率往往較高,從而產(chǎn)生過多的I/o操作,消耗大量的操作系統(tǒng)開銷。
[0081]為了不使產(chǎn)生過多的1/0操作和大量的操作系統(tǒng)開銷,根據(jù)替換上述第一種優(yōu)選方式的另一種優(yōu)選方式,方法還包括:將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的操作系統(tǒng)內(nèi)存文件中。[0082]例如,將操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到操作系統(tǒng)內(nèi)存文件/dev/shm中。如果將操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到操作系統(tǒng)內(nèi)存文件中,該映射過程不會產(chǎn)生任何I/O操作,因而也就不會消耗操作系統(tǒng)開銷。
[0083]另外,映射到操作系統(tǒng)內(nèi)存文件中的數(shù)據(jù)同樣存在數(shù)據(jù)不穩(wěn)定的問題,為了解決這一問題,在將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的操作系統(tǒng)內(nèi)存文件中之后,方法還可以進一步包括:將所述操作系統(tǒng)內(nèi)存文件中的數(shù)據(jù)備份到所述服務(wù)器上的磁盤中。
[0084]需要強調(diào)的是,將操作系統(tǒng)內(nèi)存文件中的數(shù)據(jù)備份到服務(wù)器上的磁盤中的過程不是由操作系統(tǒng)控制的,而是可以由用戶的進程來控制,也就是說,用戶的進程可以通過控制數(shù)據(jù)備份的頻率,即,降低數(shù)據(jù)備份的頻率,進而減少數(shù)據(jù)備份過程所產(chǎn)生的I/o操作次數(shù),因而也減少了操作系統(tǒng)開銷。
[0085]為了避免產(chǎn)生內(nèi)存碎片,達到內(nèi)存可控的目的,根據(jù)本發(fā)明的一種實施方式,采用了一種特殊的共享內(nèi)存管理機制,即,用于創(chuàng)建所述數(shù)據(jù)庫的所述操作系統(tǒng)共享內(nèi)存的內(nèi)存地址在運行期間不被操作系統(tǒng)釋放且回收。基于此,方法還包括:當(dāng)所述操作系統(tǒng)共享內(nèi)存中被占用的內(nèi)存塊空閑時,將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中。其中,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊可以被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0086]為了避免由于并發(fā)讀寫而造成的讀寫沖突,根據(jù)本發(fā)明的一種實施方式,當(dāng)所述預(yù)設(shè)列表中內(nèi)存地址的個數(shù)大于或者等于2時,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊才被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0087]另外,為了更方便快捷地從所分配的預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的所有內(nèi)存塊中查找到適用于每次用于數(shù)據(jù)存儲的內(nèi)存塊,根據(jù)本發(fā)明的一種實施方式,將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中包括:根據(jù)內(nèi)存塊的大小,將內(nèi)存塊對應(yīng)的內(nèi)存地址放入到相應(yīng)的預(yù)設(shè)列表中,使得大小相同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到同一個預(yù)設(shè)列表中,大小不同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到不同的預(yù)設(shè)列表中。
[0088]例如,在操作系統(tǒng)共享內(nèi)存中,是以固定大小的內(nèi)存塊為單位進行內(nèi)存分配和回收的。根據(jù)具體場景,內(nèi)存塊的大小在64字節(jié)至1024字節(jié)之間,以每64字節(jié)的幅度遞增,如圖4所示,其示出了內(nèi)存塊分配的示意圖。如果存儲的數(shù)據(jù)為12字節(jié)時,使用大小為64字節(jié)的內(nèi)存塊存儲該數(shù)據(jù),如果存儲的數(shù)據(jù)為68字節(jié),使用大小為128字節(jié)的內(nèi)存塊存儲該數(shù)據(jù)。
[0089]對于每一種大小的內(nèi)存塊,將大小相同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到同一個預(yù)設(shè)列表中,將大小不同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到不同的預(yù)設(shè)列表中。圖5示出了根據(jù)本發(fā)明一個實施方式的預(yù)設(shè)列表的示意圖。如圖5所示,將所有大小為64字節(jié)的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到第一個預(yù)設(shè)列表中(索引號為0),將所有大小為128字節(jié)的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到第二個預(yù)設(shè)列表中(索引號為1),將所有大小為192字節(jié)的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到第三個預(yù)設(shè)列表中(索引號為2),將所有大小為256字節(jié)的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到第四個預(yù)設(shè)列表中(索引號為3),依次類推。
[0090]為了實現(xiàn)對數(shù)據(jù)庫的快速操作,S卩,快速向數(shù)據(jù)庫寫入數(shù)據(jù),以及,快速從數(shù)據(jù)庫中讀取數(shù)據(jù),根據(jù)本發(fā)明的一個實施方式,對確定的內(nèi)存塊進行操作包括:按照HashMap數(shù)據(jù)結(jié)構(gòu)對確定的內(nèi)存塊進行操作。[0091]圖6示出了根據(jù)本發(fā)明一個實施方式的HashMap數(shù)據(jù)結(jié)構(gòu)的示意圖。如圖6所示,在操作系統(tǒng)共享內(nèi)存的開始位置保留一小塊空間,用于保存HashMap頭信息(Header )和桶(Bucket)數(shù)組。每一個Bucket都保存有指向該Bucket所對應(yīng)的節(jié)點列表中的第一個節(jié)點(First Entry)的指針、最后一個節(jié)點(Last Entry)的指針和該節(jié)點列表的大小(size)。每一個節(jié)點(Entry)分別包含前一個節(jié)點(PreEntry)的指針和后一個節(jié)點(Next Entry)的指針、鍵(Key)的哈希(Hash)值、以及鍵(Key)和值(Value)的指針。
[0092]基于上述HashMap數(shù)據(jù)結(jié)構(gòu),寫入進程執(zhí)行寫入數(shù)據(jù)操作的方式為:首先對要寫入的key進行哈希(Hash)運算,得到Bucket的位置;然后遍歷Bucket對應(yīng)的Entry列表,查看要寫入的key是否存在,如果不存在,則將要寫入的key添加到Entry列表的末尾,如果已存在,貝1J替換key的value。
[0093]對于每一個寫入數(shù)據(jù)操作,如果替換了舊值,那么存儲該舊值的內(nèi)存塊對應(yīng)的內(nèi)存地址就需要重新放入預(yù)設(shè)列表中,以便當(dāng)新的寫入數(shù)據(jù)操作需要內(nèi)存塊時,會根據(jù)數(shù)據(jù)的大小,重用預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊,從而達到內(nèi)存重用的目的。
[0094]基于上述HashMap數(shù)據(jù)結(jié)構(gòu),讀取進程執(zhí)行讀取數(shù)據(jù)操作的方式為:首先對要讀取的key進行哈希(Hash)運算,得到Bucket的位置;然后遍歷Bucket對應(yīng)的Entry列表,從Entry列表中查找要讀取的key,并返回要讀取的key的value。
[0095]為了避免在并行執(zhí)行多個寫入數(shù)據(jù)操作時產(chǎn)生的寫入沖突,根據(jù)本發(fā)明的一個實施方式,當(dāng)所述操作為寫入數(shù)據(jù)操作時,使用單線程將數(shù)據(jù)寫入到確定的內(nèi)存塊中。
[0096]但是,根據(jù)本發(fā)明的一個實施方式,當(dāng)所述操作為讀取數(shù)據(jù)操作時,可以使用多線程從確定的內(nèi)存塊中讀取數(shù)據(jù)。
[0097]例如,以Nginx為例,開發(fā)一個標(biāo)準(zhǔn)的Nginx模塊作為讀取進程。該Nginx模塊可以同時(即可以支持多線程)解析讀取數(shù)據(jù)操作的請求,得到該讀取數(shù)據(jù)操作的請求中所包含的參數(shù)(參數(shù)為一個或多個key),根據(jù)key調(diào)用數(shù)據(jù)庫提供的讀取接口獲取key的value,將獲取的value進行封裝后通過讀取數(shù)據(jù)操作的響應(yīng)返回給用戶。
[0098]其中,數(shù)據(jù)庫提供的讀取接口是支持多鍵值同時讀取的,例如,一個讀取數(shù)據(jù)操作的請求為:
[0099]http://www.example, com/query?key=001, 002, 003, 004。服務(wù)器中的讀取進程在調(diào)用讀取接口時,將key=001,002, 003, 004傳遞給該讀取接口,讀取接口從內(nèi)存塊中讀取各個key的value,并向讀取進程返回各個key的value。
[0100]此外,根據(jù)本發(fā)明的一個實施方式,提供了簡單的編程接口,用于實現(xiàn)數(shù)據(jù)庫初始化、寫入數(shù)據(jù)、讀取數(shù)據(jù)、以及統(tǒng)計數(shù)據(jù)庫狀態(tài):
[0101]1、數(shù)據(jù)庫初始化接口(需要指定共享內(nèi)存大小)
[0102]bool map_init(int capacity, int mem_size, const char*data_fiIe_path);
[0103]2、寫入數(shù)據(jù)接口(如果key已存在,貝丨』覆蓋key的value)
[0104]void map_put(const char氺key, const char氺value);
[0105]3、讀取數(shù)據(jù)接口(獲取key的value )
[0106]char*map_get(const char*key);
[0107]4、獲取數(shù)據(jù)庫的當(dāng)前統(tǒng)計狀態(tài)的接口
[0108]void map_stat(int*key_stat, int*value_stat)?[0109]需要說明的是,數(shù)據(jù)庫的各種編程接口可以使用C語言實現(xiàn),數(shù)據(jù)庫寫入進程和讀取進程可以使用任意支持C語言綁定的程序開發(fā)語言實現(xiàn),包括但不限于:C、C++、Java、Python 和 NodeJs 等。
[0110]根據(jù)本發(fā)明,由于數(shù)據(jù)庫是在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建的,因此,寫入進程和讀取進程可以像對本機內(nèi)存進行操作一樣直接對數(shù)據(jù)庫進行操作,而無需進行數(shù)據(jù)轉(zhuǎn)移。從而可以節(jié)約因數(shù)據(jù)轉(zhuǎn)移過程而消耗的時間以及系統(tǒng)資源,進而有效地保障對數(shù)據(jù)庫的“實時性操作”要求。
[0111]另外,通過預(yù)設(shè)列表對空閑的內(nèi)存塊進行回收和重用,不僅避免了內(nèi)存碎片的產(chǎn)生,而且還達到了內(nèi)存塊可控的目的。
[0112]還另外,采用無鎖的方式避免讀寫沖突,簡化系統(tǒng)架構(gòu),大大提高了系統(tǒng)性能。
[0113]示例性設(shè)備
[0114]在介紹了方法之后,接下來,參考圖7,其示意性地示出了根據(jù)本發(fā)明一個實施方式的設(shè)備的結(jié)構(gòu)框架圖,來描述用于實現(xiàn)數(shù)據(jù)庫實時操作的設(shè)備。具體地,該設(shè)備例如可以包括:
[0115]數(shù)據(jù)庫創(chuàng)建單元701,用于在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫;
[0116]內(nèi)存塊確定單元702,用于響應(yīng)于對所述數(shù)據(jù)庫的操作的請求,從所述操作系統(tǒng)共享內(nèi)存中確定所述操作請求所針對的內(nèi)存塊;
[0117]操作單元703,用于對確定的內(nèi)存塊進行操作。
[0118]根據(jù)本發(fā)明的一個實施方式,所述操作包括寫入數(shù)據(jù)操作和讀取數(shù)據(jù)操作。
[0119]根據(jù)本發(fā)明的一個實施方式,當(dāng)所述操作為寫入數(shù)據(jù)操作時,所述操作單元配置為:使用單線程將數(shù)據(jù)寫入到確定的內(nèi)存塊中;當(dāng)所述操作為讀取數(shù)據(jù)操作時,所述操作單元配置為:可以使用多線程從確定的內(nèi)存塊中讀取數(shù)據(jù)。
[0120]根據(jù)本發(fā)明的一個實施方式,所述操作單元配置為:
[0121 ] 按照HashMap數(shù)據(jù)結(jié)構(gòu)對確定的內(nèi)存塊進行操作。
[0122]根據(jù)本發(fā)明的某些實施方式,設(shè)備還可以包括:
[0123]第一映射單元,用于將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的磁盤中。
[0124]根據(jù)本發(fā)明的某些實施方式,設(shè)備還可以包括:
[0125]第二映射單元,用于將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的操作系統(tǒng)內(nèi)存文件中。
[0126]根據(jù)本發(fā)明的某些實施方式,用于創(chuàng)建所述數(shù)據(jù)庫的所述操作系統(tǒng)共享內(nèi)存的內(nèi)存地址在運行期間不被操作系統(tǒng)釋放且回收。
[0127]根據(jù)本發(fā)明的某些實施方式,設(shè)備還可以包括:
[0128]內(nèi)存塊管理單元,用于當(dāng)所述操作系統(tǒng)共享內(nèi)存中被占用的內(nèi)存塊空閑時,將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中。
[0129]根據(jù)本發(fā)明的一個實施方式,所述內(nèi)存塊管理單元配置為:
[0130]根據(jù)內(nèi)存塊的大小,將內(nèi)存塊對應(yīng)的內(nèi)存地址放入到相應(yīng)的預(yù)設(shè)列表中,使得大小相同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到同一個預(yù)設(shè)列表中,大小不同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到不同的預(yù)設(shè)列表中。[0131]根據(jù)本發(fā)明的一個實施方式,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊可以被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0132]根據(jù)本發(fā)明的一個實施方式,當(dāng)所述預(yù)設(shè)列表中的內(nèi)存地址的個數(shù)大于或者等于2時,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊才被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
[0133]根據(jù)本發(fā)明,由于數(shù)據(jù)庫是在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建的,因此,寫入進程和讀取進程可以像對本機內(nèi)存進行操作一樣直接對數(shù)據(jù)庫進行操作,而無需進行數(shù)據(jù)轉(zhuǎn)移。從而可以節(jié)約因數(shù)據(jù)轉(zhuǎn)移過程而消耗的時間以及系統(tǒng)資源,進而有效地保障對數(shù)據(jù)庫的“實時性操作”要求。
[0134]另外,通過預(yù)設(shè)列表對空閑的內(nèi)存塊進行回收和重用,不僅避免了內(nèi)存碎片的產(chǎn)生,而且還達到了內(nèi)存塊可控的目的。
[0135]還另外,采用無鎖的方式避免讀寫沖突,簡化系統(tǒng)架構(gòu),大大提高了系統(tǒng)性能。
[0136]應(yīng)當(dāng)注意,盡管在上文詳細描述中提及了實現(xiàn)數(shù)據(jù)庫實時操作的設(shè)備的若干裝置或子裝置,但是這種劃分僅僅是示列性的并非強制性的。實際上,根據(jù)本發(fā)明的實施方式,上文描述的兩個或更多裝置的特征和功能可以在一個裝置中實現(xiàn)。或者相反地,上文描述的一個裝置的特征和功能可以進一步劃分為由多個裝置來實現(xiàn)。
[0137]此外,盡管在附圖中以特定順序描述了本發(fā)明方法的操作,但是,這并非要求或者暗示必須按照該特定順序來執(zhí)行這些操作,或是必須執(zhí)行全部所示的操作才能實現(xiàn)期望的結(jié)果。相反,流程圖中描繪的步驟可以改變執(zhí)行順序。附加地或備選地,可以省略某些步驟,將多個步驟合并為一個步驟執(zhí)行,和/或?qū)⒁粋€步驟分解為多個步驟執(zhí)行。
[0138]申請文件中提及的動詞“包括”、“包含”及其詞形變化的使用不排除除了申請文件中記載的那些元素或步驟之外的元素或步驟的存在。元素前的冠詞“一”或“一個”不排除多個這種元素的存在。
[0139]雖然已經(jīng)參考若干【具體實施方式】描述了本發(fā)明的精神和原理,但是應(yīng)該理解,本發(fā)明并不限于所公開的【具體實施方式】,對各方面的劃分也不意味著這些方面中的特征不能組合以進行受益,這種劃分僅是為了表述的方便。本發(fā)明旨在涵蓋所附權(quán)利要求的精神和范圍內(nèi)所包括的各種修改和等同布置。所附權(quán)利要求的范圍符合最寬泛的解釋,從而包含所有這樣的修改及等同結(jié)構(gòu)和功能。
【權(quán)利要求】
1.一種方法,包括: 在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫; 響應(yīng)于對所述數(shù)據(jù)庫的操作的請求,從所述操作系統(tǒng)共享內(nèi)存中確定所述操作所針對的內(nèi)存塊; 對確定的內(nèi)存塊進行操作。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述操作包括寫入數(shù)據(jù)操作和讀取數(shù)據(jù)操作。
3.根據(jù)權(quán)利要求1所述的方法,還包括: 將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的磁盤中。
4.根據(jù)權(quán)利要求1所述的方法,還包括: 將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的操作系統(tǒng)內(nèi)存文件中。
5.根據(jù)權(quán)利要求1所述的方法,其中,用于創(chuàng)建所述數(shù)據(jù)庫的所述操作系統(tǒng)共享內(nèi)存的內(nèi)存地址在運行期間不被操作系統(tǒng)釋放且回收。
6.根據(jù)權(quán)利要求5所述的方法,還包括: 當(dāng)所述操作系統(tǒng)共享內(nèi)存中被占用的內(nèi)存塊空閑時,將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中。
7.根據(jù)權(quán)利要求6所述的方法,其中,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊可以被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
8.根據(jù)權(quán)利要求7所述的方法,其中,當(dāng)所述預(yù)設(shè)列表中的內(nèi)存地址的個數(shù)大于或者等于2時,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊才被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
9.根據(jù)權(quán)利要求6所述的方法,其中,所述將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中包括: 根據(jù)內(nèi)存塊的大小,將內(nèi)存塊對應(yīng)的內(nèi)存地址放入到相應(yīng)的預(yù)設(shè)列表中,使得大小相同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到同一個預(yù)設(shè)列表中,大小不同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到不同的預(yù)設(shè)列表中。
10.根據(jù)權(quán)利要求1所述的方法,其中,所述對確定的內(nèi)存塊進行操作包括: 按照HashMap數(shù)據(jù)結(jié)構(gòu)對確定的內(nèi)存塊進行操作。
11.根據(jù)權(quán)利要求2所述的方法,其中,當(dāng)所述操作為寫入數(shù)據(jù)操作時,使用單線程將數(shù)據(jù)寫入到確定的內(nèi)存塊中。
12.根據(jù)權(quán)利要求2所述的方法,其中,當(dāng)所述操作為讀取數(shù)據(jù)操作時,可以使用多線程從確定的內(nèi)存塊中讀取數(shù)據(jù)。
13.—種設(shè)備,包括: 數(shù)據(jù)庫創(chuàng)建單元,用于在服務(wù)器上的操作系統(tǒng)共享內(nèi)存中創(chuàng)建數(shù)據(jù)庫; 內(nèi)存塊確定單元,用于響應(yīng)于對所述數(shù)據(jù)庫的操作的請求,從所述操作系統(tǒng)共享內(nèi)存中確定所述操作請求所針對的內(nèi)存塊; 操作單元,用于對確定的內(nèi)存塊進行操作。
14.根據(jù)權(quán)利要求13所述的設(shè)備,其中,所述操作包括寫入數(shù)據(jù)操作和讀取數(shù)據(jù)操作。
15.根據(jù)權(quán)利要求13所述的設(shè)備,還包括: 第一映射單元,用于將所 述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的磁盤中。
16.根據(jù)權(quán)利要求13所述的設(shè)備,還包括: 第二映射單元,用于將所述操作系統(tǒng)共享內(nèi)存中的數(shù)據(jù)映射到所述服務(wù)器上的操作系統(tǒng)內(nèi)存文件中。
17.根據(jù)權(quán)利要求13所述的設(shè)備,其中,用于創(chuàng)建所述數(shù)據(jù)庫的所述操作系統(tǒng)共享內(nèi)存的內(nèi)存地址在運行期間不被操作系統(tǒng)釋放且回收。
18.根據(jù)權(quán)利要求17所述的設(shè)備,還包括: 內(nèi)存塊管理單元,用于當(dāng)所述操作系統(tǒng)共享內(nèi)存中被占用的內(nèi)存塊空閑時,將空閑的內(nèi)存塊對應(yīng)的內(nèi)存地址放入預(yù)設(shè)列表中。
19.根據(jù)權(quán)利要求18所述的設(shè)備,其中, 所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊可以被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
20.根據(jù)權(quán)利要求19所述的設(shè)備,其中, 當(dāng)所述預(yù)設(shè)列表中的內(nèi)存地址的個數(shù)大于或者等于2時,所述預(yù)設(shè)列表中的內(nèi)存地址對應(yīng)的內(nèi)存塊才被重新用于保存所述數(shù)據(jù)庫的數(shù)據(jù)。
21.根據(jù)權(quán)利要求18所述的設(shè)備,其中,所述內(nèi)存塊管理單元配置為: 根據(jù)內(nèi)存塊的大小,將內(nèi)存塊對應(yīng)的內(nèi)存地址放入到相應(yīng)的預(yù)設(shè)列表中,使得大小相同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到同一個預(yù)設(shè)列表中,大小不同的內(nèi)存塊對應(yīng)的內(nèi)存地址放入到不同的預(yù)設(shè)列 表中。
22.根據(jù)權(quán)利要求13所述的設(shè)備,其中,所述操作單元配置為: 按照HashMap數(shù)據(jù)結(jié)構(gòu)對確定的內(nèi)存塊進行操作。
23.根據(jù)權(quán)利要求14所述的設(shè)備,其中,當(dāng)所述操作為寫入數(shù)據(jù)操作時,所述操作單元配置為: 使用單線程將數(shù)據(jù)寫入到確定的內(nèi)存塊中。
24.根據(jù)權(quán)利要求14所述的設(shè)備,其中,當(dāng)所述操作為讀取數(shù)據(jù)操作時,所述操作單元配置為: 可以使用多線程從確定的內(nèi)存塊中讀取數(shù)據(jù)。
【文檔編號】G06F17/30GK103593485SQ201310648091
【公開日】2014年2月19日 申請日期:2013年12月4日 優(yōu)先權(quán)日:2013年12月4日
【發(fā)明者】鄭錦榮, 吳肇宣, 婁振林 申請人:網(wǎng)易傳媒科技(北京)有限公司