內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)組織及訪問(wèn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種關(guān)系數(shù)據(jù)庫(kù)在內(nèi)存中的數(shù)據(jù)組織及訪問(wèn)方法。
[0002]背景意義
[0003]關(guān)系數(shù)據(jù)庫(kù)(relat1naldatabase)是一種采用關(guān)系模型作為數(shù)據(jù)的組織方式。關(guān)系數(shù)據(jù)庫(kù)的特點(diǎn)在于將具有相同屬性的數(shù)據(jù)獨(dú)立地存儲(chǔ)在一個(gè)表中。用戶(hù)對(duì)數(shù)據(jù)庫(kù)里的表進(jìn)行查詢(xún)、插入、刪除和連接等操作,實(shí)際是讀、寫(xiě)存儲(chǔ)設(shè)備上的數(shù)據(jù)。要從表中數(shù)據(jù)的邏輯地址找到其在存儲(chǔ)設(shè)備上的物理位置,需要有一個(gè)索引結(jié)構(gòu)。因此,訪問(wèn)存儲(chǔ)設(shè)備的性能對(duì)數(shù)據(jù)庫(kù)的性能有至關(guān)重要的影響。
[0004]內(nèi)存關(guān)系數(shù)據(jù)庫(kù)(in-memorydatabase)是指將關(guān)系數(shù)據(jù)庫(kù)的部分?jǐn)?shù)據(jù)或全部數(shù)據(jù)存放在內(nèi)存中。目前,內(nèi)存數(shù)據(jù)庫(kù)中的數(shù)據(jù)在物理內(nèi)存中有兩種組織及訪問(wèn)方式:
[0005]1.現(xiàn)有技術(shù)一:數(shù)據(jù)庫(kù)的表以文件的形式存放在內(nèi)存中。這種方式下,訪問(wèn)表中的數(shù)據(jù)實(shí)際是訪問(wèn)文件系統(tǒng)中的文件,需要調(diào)用文件系統(tǒng)的接口,例如read()、write()。訪問(wèn)數(shù)據(jù)庫(kù)的性能依賴(lài)訪問(wèn)文件的性能。
[0006]現(xiàn)有技術(shù)一有以下缺點(diǎn):
[0007]應(yīng)用程序訪問(wèn)表中的數(shù)據(jù)需要至少一次拷貝操作,即把數(shù)據(jù)從文件系統(tǒng)拷貝到用戶(hù)緩存。
[0008]訪問(wèn)表的數(shù)據(jù)需要切換內(nèi)核態(tài),并經(jīng)過(guò)文件系統(tǒng)的多個(gè)軟件層次,例如Linux操作系統(tǒng)中的虛擬文件系統(tǒng)層(virtual file system)。因此會(huì)有較大的性能開(kāi)銷(xiāo)。
[0009]所以,現(xiàn)有技術(shù)一在組織和訪問(wèn)表的過(guò)程中有較大的軟件層性能開(kāi)銷(xiāo)。
[0010]2.現(xiàn)有技術(shù)二:使用專(zhuān)有內(nèi)存管理機(jī)制管理數(shù)據(jù)庫(kù)所使用的內(nèi)存。例如目前卡耐基梅隆大學(xué)和Intel的聯(lián)合研究 “Let,s Talk About Storage&Recovery Methods forNon-Volatile Memory Database Systems”,In Proceedings of the 2015ACM SIGMODInternat1nal Conference on Management of Data,Joy Arulraj,Andrew Pavlo,andSubramanya R.Dulloor,ISBN:978-1-4503-2758-9( “談非易失性?xún)?nèi)存數(shù)據(jù)庫(kù)系統(tǒng)的存儲(chǔ)和恢復(fù)方法”,2015美國(guó)計(jì)算機(jī)學(xué)會(huì)SIGMOD數(shù)據(jù)管理國(guó)際會(huì)議,Joy Arulraj ,Andrew Pavlo,and Subramanya R.Dulloor,ISBN: 978-1-4503-2758-9),使用一個(gè)特殊的內(nèi)存分配器給數(shù)據(jù)庫(kù)的表分配內(nèi)存,直接把存放數(shù)據(jù)的物理內(nèi)存映射到一塊用戶(hù)虛擬地址空間。此時(shí)用戶(hù)訪問(wèn)已映射好的內(nèi)存就不再需要拷貝操作。為了確保已映射的物理內(nèi)存不會(huì)丟失,已映射的物理內(nèi)存總是使用固定的用戶(hù)虛擬地址空間,并且在操作系統(tǒng)中保存已有的映射關(guān)系。
[0011]現(xiàn)有技術(shù)二有以下缺點(diǎn):
[0012]已有的數(shù)據(jù)持續(xù)占用虛擬地址空間;
[0013]由于已分配的用戶(hù)虛擬地址空間和物理內(nèi)存有固定的映射關(guān)系,因此需要額外的機(jī)制記錄和回收物理內(nèi)存和虛擬內(nèi)存;
[0014]數(shù)據(jù)庫(kù)的啟動(dòng)速度慢,需要在用戶(hù)地址空間重建整個(gè)數(shù)據(jù)庫(kù)中數(shù)據(jù)的映射關(guān)系;
[0015]由于地址映射方式的問(wèn)題,表的大小受限于虛擬地址空間的大小和表的數(shù)量;
[0016]此外,在表的增長(zhǎng)過(guò)程中會(huì)出現(xiàn)虛擬地址沖突問(wèn)題,需要額外的沖突控制機(jī)制。
【發(fā)明內(nèi)容】
[0017]有鑒于此,本發(fā)明提供一種內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)組織及訪問(wèn)方法,能實(shí)現(xiàn)快速映射和高速訪問(wèn)表中的數(shù)據(jù)。
[0018]本發(fā)明通過(guò)以下技術(shù)手段解決上述技術(shù)問(wèn)題:
[0019]內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)組織方法,包括如下步驟:
[0020]a)以表的形式組織數(shù)據(jù);
[0021 ] b)為每個(gè)表建立連續(xù)且獨(dú)立的虛擬地址空間;
[0022]c)將數(shù)據(jù)在內(nèi)存中的物理地址存儲(chǔ)在表頁(yè)表中;
[0023]d)將表和表頁(yè)表的映射關(guān)系存放在內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的索引表中;
[0024]e)用內(nèi)存關(guān)系數(shù)據(jù)庫(kù)管理數(shù)據(jù)和進(jìn)程頁(yè)表的物理內(nèi)存。
[0025]進(jìn)一步,所述步驟b)中,所述表頁(yè)表為一級(jí)頁(yè)表或多級(jí)頁(yè)表,為多級(jí)頁(yè)表時(shí),其中最后一級(jí)頁(yè)表中存放有數(shù)據(jù)頁(yè)的起始物理地址。
[0026]進(jìn)一步,所述步驟d)中,索引表的數(shù)據(jù)結(jié)構(gòu)為數(shù)組、鏈表或結(jié)構(gòu)體。
[0027]進(jìn)一步,所述索引表中保存有表及表頁(yè)表的最尚級(jí)指針,所述最尚級(jí)指針指向表頁(yè)表。
[0028]內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)方法,包括如下步驟:
[0029]I)建立映射;具體包括如下步驟:
[0030]11)接收到進(jìn)程為表建立映射的請(qǐng)求;
[0031]12)從發(fā)出請(qǐng)求的進(jìn)程的虛擬地址空間中獲得一塊獨(dú)立且連續(xù)的虛擬地址空間,作為要訪問(wèn)的表在進(jìn)程中的虛擬地址空間,并返回表在虛擬地址空間的起始地址;
[0032]13)利用控制寄存器,訪問(wèn)進(jìn)程的進(jìn)程頁(yè)表,找到表的虛擬地址空間在進(jìn)程頁(yè)表中對(duì)應(yīng)的條目;
[0033 ] 14)在內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的索引表中找到表的最高級(jí)指針;
[0034]15)將最高級(jí)指針的值寫(xiě)入進(jìn)程頁(yè)表中對(duì)應(yīng)的條目,即完成表在進(jìn)程頁(yè)表中的映射;
[0035]2)讀數(shù)據(jù)或?qū)憯?shù)據(jù);
[0036]讀數(shù)據(jù)時(shí)包括如下步驟:
[0037]211)接收進(jìn)程讀取表中數(shù)據(jù)的請(qǐng)求;
[0038]212)通過(guò)表在虛擬地址空間的起始虛擬地址加上進(jìn)程所請(qǐng)求的數(shù)據(jù)在表中的偏移量,計(jì)算出所請(qǐng)求的數(shù)據(jù)的虛擬地址;
[0039]213)通過(guò)內(nèi)存映射設(shè)備和連接到進(jìn)程頁(yè)表的表頁(yè)表,將步驟212)中獲得的數(shù)據(jù)的虛擬地址轉(zhuǎn)換為數(shù)據(jù)在內(nèi)存關(guān)系數(shù)據(jù)庫(kù)所管理的內(nèi)存上的物理地址;
[0040]214)進(jìn)程訪問(wèn)物理地址所指數(shù)據(jù)頁(yè)中的數(shù)據(jù);
[0041 ]寫(xiě)數(shù)據(jù)時(shí)包括如下步驟:
[0042]221)接收進(jìn)程向表中寫(xiě)數(shù)據(jù)的請(qǐng)求;
[0043]222)通過(guò)表在虛擬地址空間的起始虛擬地址,加上進(jìn)程寫(xiě)數(shù)據(jù)的位置在表中的偏移量,計(jì)算出寫(xiě)數(shù)據(jù)的位置的虛擬地址;
[0044]223)判斷寫(xiě)操作是否需要分配新的存儲(chǔ)空間,如是,則執(zhí)行步驟224),如否,執(zhí)行步驟225);
[0045]224)從內(nèi)存關(guān)系數(shù)據(jù)庫(kù)所管理的物理內(nèi)存中獲取空閑物理頁(yè)面,并加入到表的表頁(yè)表中,完成映射;
[0046]225)進(jìn)程將數(shù)據(jù)寫(xiě)入表在內(nèi)存關(guān)系數(shù)據(jù)庫(kù)中對(duì)應(yīng)的物理頁(yè)面,并通過(guò)內(nèi)存映射設(shè)備和插入到進(jìn)程頁(yè)表的表頁(yè)表,將步驟222)中得到的虛擬地址轉(zhuǎn)換為內(nèi)存關(guān)系數(shù)據(jù)庫(kù)管理的內(nèi)存的物理地址,完成映射;
[0047]3)取消映射;具體包括如下步驟
[0048]31)接收到進(jìn)程為表取消映射的請(qǐng)求;
[0049]32)釋放表建立映射時(shí)獲得的進(jìn)程中的虛擬地址空間;
[0050]33)清除虛擬地址空間在進(jìn)程的進(jìn)程頁(yè)表中對(duì)應(yīng)的條目。
[0051]進(jìn)一步,步驟12)中,返回的表在虛擬地址空間的起始地址記錄在關(guān)系數(shù)據(jù)庫(kù)中、用戶(hù)進(jìn)程中或索引表中。
[0052]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果如下:
[0053 ] 一、數(shù)據(jù)訪問(wèn)速度快。原因有二:
[0054]1.使用內(nèi)存映射硬件設(shè)備進(jìn)行虛擬地址到物理地址的轉(zhuǎn)換,充分發(fā)揮內(nèi)存的高訪問(wèn)速度。
[0055]2.利用表頁(yè)表的形式組織數(shù)據(jù)庫(kù)中表,可以保證單個(gè)表具有獨(dú)立且連續(xù)的虛擬地址空間,由于數(shù)據(jù)的組織使用連續(xù)的地址空間,可以從讀寫(xiě)數(shù)據(jù)的起始虛擬地址開(kāi)始,一次性訪問(wèn)讀寫(xiě)長(zhǎng)度內(nèi)的數(shù)據(jù)頁(yè),不需要用軟件反復(fù)查找不同數(shù)據(jù)頁(yè)的虛擬地址。
[0056]二、常數(shù)時(shí)間內(nèi)建立表的物理地址到虛擬地址的映射。原因:表的組織格式與進(jìn)程頁(yè)表格式相同,實(shí)現(xiàn)零切換,無(wú)需重建,只需要將表頁(yè)表的指針插入進(jìn)程頁(yè)表,是常數(shù)時(shí)間的操作。
[0057]良好的表保護(hù),不需要額外的寫(xiě)保護(hù)機(jī)制。原因:不同的表各有獨(dú)立的虛擬地址空間,內(nèi)存關(guān)系數(shù)據(jù)庫(kù)在存儲(chǔ)介質(zhì)上的信息受進(jìn)程虛擬地址和內(nèi)存映射硬件設(shè)備的保護(hù),不會(huì)誤寫(xiě)。
【附圖說(shuō)明】
[0058]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步描述。
[0059]圖1示出了內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)組織方法的流程示意圖;
[0060]圖2示出了內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)訪問(wèn)方法的流程示意圖。
【具體實(shí)施方式】
[0061 ]以下將結(jié)合附圖對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。
[0062]—、內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)組織方法
[0063]參見(jiàn)圖1,包括如下步驟:
[0064]a)以表的形式組織數(shù)據(jù);內(nèi)存關(guān)系數(shù)據(jù)庫(kù)的數(shù)據(jù)以一個(gè)或