專(zhuān)利名稱(chēng):基于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法
技術(shù)領(lǐng)域:
本發(fā)明涉及空間數(shù)據(jù)庫(kù)領(lǐng)域,特別涉及基于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法。
背景技術(shù):
自E.F.Codd博士提出關(guān)系模型理論以來(lái),關(guān)系數(shù)據(jù)庫(kù)得到迅速發(fā)展,并已成為數(shù)據(jù)庫(kù)的主流,空間數(shù)據(jù)庫(kù)也從文件型發(fā)展到關(guān)系數(shù)據(jù)庫(kù)型。但隨著互聯(lián)網(wǎng)的高速發(fā)展,出現(xiàn)了很多大規(guī)模和高并發(fā)的空間數(shù)據(jù)在線應(yīng)用,這些應(yīng)用要求空間數(shù)據(jù)庫(kù)支持?jǐn)?shù)據(jù)的高并發(fā)性、存儲(chǔ)訪問(wèn)的高效性和在線擴(kuò)展性,關(guān)系數(shù)據(jù)庫(kù)在這些應(yīng)用面前疲態(tài)盡顯,而NoSQL數(shù)據(jù)庫(kù)具有高可用性、高可靠性和高性能等優(yōu)異特性,無(wú)疑為滿足上述應(yīng)用要求提供了一條很有前景的解決之道??臻g索引是提高空間查詢(xún)效率的關(guān)鍵技術(shù),常用的空間索引包括網(wǎng)格索引、四叉樹(shù)索引和R樹(shù)索引等,而四叉樹(shù)索引因其簡(jiǎn)單高效得到廣泛應(yīng)用。四叉樹(shù)索引采用遞歸查詢(xún)方法,從根結(jié)點(diǎn)開(kāi)始進(jìn)行層次遍歷,對(duì)于關(guān)系型空間數(shù)據(jù)庫(kù),由于空間范圍的連續(xù)性并不意味著數(shù)據(jù)物理存儲(chǔ)的連續(xù)性,最終的空間查詢(xún)結(jié)果往往需要很多次I/O操作,影響了查詢(xún)效率。與關(guān)系數(shù)據(jù)庫(kù)不同,Key/Value型NoSQL數(shù)據(jù)庫(kù)具有順序存儲(chǔ)的特點(diǎn),因此,如果數(shù)據(jù)查詢(xún)時(shí)能進(jìn)行順序查詢(xún)而不是隨機(jī)查詢(xún),就能減少I(mǎi)/O操作,提高查詢(xún)效率。經(jīng)典的四叉樹(shù)索引或者不對(duì)數(shù)據(jù)對(duì)象編碼作任 何要求,或者采用層次四叉樹(shù)編碼,都不能有效利用Key/Value型NoSQL數(shù)據(jù)庫(kù)順序存儲(chǔ)的優(yōu)勢(shì)。本發(fā)明在MX-CIF四叉樹(shù)的基礎(chǔ)上,設(shè)計(jì)了一種前序四叉樹(shù)編碼方案和索引方法,在使用Key/Value型NoSQL數(shù)據(jù)庫(kù)存儲(chǔ)時(shí),能使矢量數(shù)據(jù)物理存儲(chǔ)次序與空間連續(xù)性一致、數(shù)據(jù)主鍵次序與物理存儲(chǔ)次序一致,從而在空間查詢(xún)時(shí)發(fā)揮Key/Value型NoSQL數(shù)據(jù)庫(kù)順序查詢(xún)的優(yōu)勢(shì),提高查詢(xún)性能。
發(fā)明內(nèi)容
如圖1所示,本發(fā)明針對(duì)矢量數(shù)據(jù)(主要是線狀數(shù)據(jù)和面狀數(shù)據(jù))數(shù)據(jù)組織和四叉樹(shù)索引的特點(diǎn),結(jié)合Key/Value型NoSQL數(shù)據(jù)庫(kù)主鍵邏輯順序和物理順序一致的特點(diǎn),提供了一種基于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法,這種方法矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法包括如下步驟:
步驟1:完全四叉樹(shù)空間劃分與先序四叉樹(shù)結(jié)點(diǎn)編碼;
四叉樹(shù)根結(jié)點(diǎn)對(duì)應(yīng)整個(gè)數(shù)據(jù)空間,按完全四叉樹(shù)的規(guī)則,將整個(gè)空間進(jìn)行完全四叉樹(shù)遞歸劃分,直到到達(dá)四叉樹(shù)的最大高度,得到一棵完全四叉樹(shù),然后對(duì)完全四叉樹(shù)進(jìn)行先序遍歷,按先序遍歷次序依次給各結(jié)點(diǎn)編號(hào),直到完成整棵四叉樹(shù)結(jié)點(diǎn)編碼;
步驟2:矢量數(shù)據(jù)前綴編碼和索引構(gòu)建;
從根結(jié)點(diǎn)開(kāi)始遍歷整棵四叉樹(shù),根據(jù)矢量對(duì)象的最小外包矩形(MBR)確定能完整包含該MBR的最小結(jié)點(diǎn)node,以該結(jié)點(diǎn)編碼作為前綴編碼該矢量對(duì)象,并以該編碼作為主鍵key把矢量對(duì)象存儲(chǔ)到數(shù)據(jù)庫(kù),然后更新node索引信息,索引信息包含兩部分,一部分是索引對(duì)象(key, MBR)表,要求node中的索引對(duì)象表按主鍵key遞增排列,一部分是索引區(qū)間(minKey, maxKey),表示以該結(jié)點(diǎn)為根的子樹(shù)的索引鍵區(qū)間。最后更新從node到根結(jié)點(diǎn)路徑上所有結(jié)點(diǎn)的索引區(qū)間;
步驟3:先序四叉樹(shù)索引;
從根結(jié)點(diǎn)開(kāi)始先序遍歷;
A如果查詢(xún)窗口與結(jié)點(diǎn)相離,跳過(guò)以該結(jié)點(diǎn)為根的整棵子樹(shù);
B如果查詢(xún)窗口完全覆蓋結(jié)點(diǎn),則讀取該結(jié)點(diǎn)的索引區(qū)間信息(minKey,maxKey ),然后根據(jù)minKey和maxKey對(duì)數(shù)據(jù)庫(kù)進(jìn)行范圍查詢(xún);
C如果查詢(xún)窗口與結(jié)點(diǎn)部分相交,則首先讀取該結(jié)點(diǎn)的索引對(duì)象表并進(jìn)行MBR和查詢(xún)窗口相交檢測(cè),然后使用通過(guò)檢測(cè)的索引對(duì)象編碼對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún),最后先序遍歷四棵子樹(shù),按上述方法處理子樹(shù)結(jié)點(diǎn)。本發(fā)明的優(yōu)點(diǎn)為:該方法使數(shù)據(jù)物理存儲(chǔ)次序與空間范圍連續(xù)性一致、數(shù)據(jù)主鍵次序與物理存儲(chǔ)次序一致,從而在空間查詢(xún)時(shí)能減少I(mǎi)/o操作,提高查詢(xún)效率。
圖1為本發(fā)明的完全四叉樹(shù)空間劃分的示意圖。圖2為本發(fā)明的四叉樹(shù)先序編碼的示意圖。附圖標(biāo)記說(shuō)明:1-根結(jié)點(diǎn)編碼;2、23、44、65、3、8、13、18、24、29、34、39、45、50、55、
60、66、71、76、81、25、26、27、28、82、83、84、85_ 子結(jié)點(diǎn)編碼。
圖3為本發(fā)明的矢量數(shù)據(jù)前綴編碼和索引構(gòu)建的示意圖。附圖標(biāo)記說(shuō)明:1、2、3、4、5、6-矢量對(duì)象及其外包矩形MBR。圖4為本發(fā)明的先序四叉樹(shù)索引的示意圖。附圖標(biāo)記說(shuō)明:1、2、3、4、5、6-矢量對(duì)象及其外包矩形MBR。
具體實(shí)施例方式以下結(jié)合說(shuō)明書(shū)附圖對(duì)本發(fā)明創(chuàng)造作進(jìn)一步的詳細(xì)說(shuō)明。實(shí)施例一。如圖1、2、3和4所示,本實(shí)施例中,本發(fā)明的這種基于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法:
步驟1:完全四叉樹(shù)空間劃分與先序四叉樹(shù)結(jié)點(diǎn)編碼;
Ca)完全四叉樹(shù)空間劃分;
設(shè)四叉樹(shù)高度maxLevel = 4。將根結(jié)點(diǎn)一分為四得到四個(gè)等大的子結(jié)點(diǎn),再對(duì)四個(gè)子結(jié)點(diǎn)進(jìn)行遞歸分割,直到最大層次等于四叉樹(shù)的高度,得到一個(gè)高度為maxLevel的完全四叉樹(shù);
(b)四叉樹(shù)先序編碼;
對(duì)四叉樹(shù)進(jìn)行先序編碼,根結(jié)點(diǎn)編碼為1,得到高度=4的四叉樹(shù)先序編碼;
步驟2:矢量數(shù)據(jù)前綴編碼和索引構(gòu)建; (a)前綴編碼:對(duì)于每個(gè)矢量對(duì)象I (0001)、2 (0002),3 (0003),4 (0004),5 (0005)、6(0006),首先得到其外包矩形MBR,確定能完整包含該MBR的最小結(jié)點(diǎn)編碼分別為:1(02)、2(30)、3(65)、4(01)、5(76)、6(44)。把這些結(jié)點(diǎn)編碼附加到矢量對(duì)象原來(lái)的編碼上即為該對(duì)象的前綴編碼;則這些矢量要素的前綴編碼可記為1:020001、2 =300002,3 =650003,4:010004,5:760005,6:440006 ;
(b)索引構(gòu)建:在矢量對(duì)象所在的四叉樹(shù)結(jié)點(diǎn)中添加索引對(duì)象信息(前綴編碼,MBR)。為了保證每個(gè)網(wǎng)格單元的索引信息表按前綴編碼遞增排序,采用直接插入排序插入索引信息。然后更新從該結(jié)點(diǎn)到根結(jié)點(diǎn)路徑上所有結(jié)點(diǎn)的索引區(qū)間信息;
該例子中,對(duì)于結(jié)點(diǎn)1,其索引對(duì)象表:(010004,MBR),其索引區(qū)間:(010004, 760005),對(duì)于結(jié)點(diǎn)65,其索引對(duì)象表:(650003,MBR),其索引區(qū)間:(650003, 760005);
步驟3:先序四叉樹(shù)索引;
(a)從根結(jié)點(diǎn)開(kāi)始先序遍歷(灰色框?yàn)椴樵?xún)范圍);
(b)如果查詢(xún)窗口與結(jié)點(diǎn)相離,跳過(guò)以該結(jié)點(diǎn)為根的整棵子樹(shù);
跳過(guò)編號(hào)為2,23和65的根結(jié)點(diǎn)的子樹(shù);
(C)如果查詢(xún)窗口完全覆蓋結(jié)點(diǎn)對(duì)應(yīng)區(qū)域,則只需讀取該結(jié)點(diǎn)的索引區(qū)間信息并對(duì)數(shù)據(jù)庫(kù)進(jìn)行范圍查詢(xún);
沒(méi)有找到查詢(xún)窗口完全覆蓋結(jié)點(diǎn)的區(qū)域;
(d)如果查詢(xún)窗口與結(jié)點(diǎn)部分相交,則首先讀取該結(jié)點(diǎn)的索引對(duì)象表并進(jìn)行MBR和查詢(xún)窗口相交檢測(cè),然后使用通過(guò)檢測(cè)的索引對(duì)象編碼對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún);
編號(hào)為44的結(jié)點(diǎn)與查詢(xún)窗口相交,該結(jié)點(diǎn)索引對(duì)象表為(650003,MBR)并能通過(guò)相交檢測(cè),則以650003對(duì)數(shù)據(jù)庫(kù)查詢(xún),然后繼續(xù)遍歷子樹(shù),最后使用760005對(duì)數(shù)據(jù)庫(kù)查詢(xún)。
權(quán)利要求
1.關(guān)于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法,其特征在于:這種矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法包括如下步驟: 步驟1:完全四叉樹(shù)空間劃分與先序四叉樹(shù)結(jié)點(diǎn)編碼; 四叉樹(shù)根結(jié)點(diǎn)對(duì)應(yīng)整個(gè)數(shù)據(jù)空間,按完全四叉樹(shù)的規(guī)則,將整個(gè)空間進(jìn)行完全四叉樹(shù)遞歸劃分,直到到達(dá)四叉樹(shù)的最大高度,得到一棵完全四叉樹(shù),然后對(duì)完全四叉樹(shù)進(jìn)行先序遍歷,按先序遍歷次序依次給各結(jié)點(diǎn)編號(hào),直到完成整棵四叉樹(shù)結(jié)點(diǎn)編碼; 步驟2:矢量數(shù)據(jù)前綴編碼和索引構(gòu)建; 從根結(jié)點(diǎn)開(kāi)始遍歷整棵四叉樹(shù),根據(jù)矢量對(duì)象的最小外包矩形(MBR)確定能完整包含該MBR的最小結(jié)點(diǎn)node,以該結(jié)點(diǎn)編碼作為前綴編碼該矢量對(duì)象,并以該編碼作為主鍵key把矢量對(duì)象存儲(chǔ)到數(shù)據(jù)庫(kù),然后更新node索引信息,索引信息包含兩部分,一部分是索引對(duì)象(key, MBR)表,要求node中的索引對(duì)象表按主鍵key遞增排列,一部分是索引區(qū)間(minKey, maxKey ),表示以該結(jié)點(diǎn)為根的子樹(shù)的索引鍵區(qū)間,最后更新從node到根結(jié)點(diǎn)路徑上所有結(jié)點(diǎn)的索引區(qū)間; 步驟3:先序四叉樹(shù)索引; 從根結(jié)點(diǎn)開(kāi)始先序遍歷; A如果查詢(xún)窗口與結(jié)點(diǎn)相離,跳過(guò)以該結(jié)點(diǎn)為根的整棵子樹(shù); B如果查詢(xún)窗口完全覆蓋結(jié)點(diǎn),則讀取該結(jié)點(diǎn)的索引區(qū)間信息(minKey,maxKey ),然后根據(jù)minKey和maxKey對(duì)數(shù)據(jù)庫(kù)進(jìn)行范圍查詢(xún); C如果查詢(xún)窗口與結(jié)點(diǎn)部分相交,則首先讀取該結(jié)點(diǎn)的索引對(duì)象表并進(jìn)行MBR和查詢(xún)窗口相交檢測(cè),然后使用通過(guò)檢測(cè)的索引對(duì)象編碼對(duì)數(shù)據(jù)庫(kù)進(jìn)行查詢(xún),最后先序遍歷四棵子樹(shù),按上述方法處理子樹(shù)結(jié)點(diǎn)。
2.根據(jù)權(quán)利要求1所述的基于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法,其特征在于:該方法使數(shù)據(jù)物理存儲(chǔ)次序與空間范圍連續(xù)性一致。
3.根據(jù)權(quán)利要求1所述的基于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法,其特征在于:該方法使數(shù)據(jù)主鍵次序與物理存儲(chǔ)次序一致,從而在空間查詢(xún)時(shí)能減少I(mǎi)/O操作,提高查詢(xún)效率。
全文摘要
本發(fā)明涉及一種基于Key/Value型NoSQL數(shù)據(jù)庫(kù)的矢量數(shù)據(jù)先序四叉樹(shù)編碼和索引方法,這種方法使數(shù)據(jù)物理存儲(chǔ)次序與空間范圍連續(xù)性一致、數(shù)據(jù)主鍵次序與物理存儲(chǔ)次序一致,從而在空間查詢(xún)時(shí)能減少I(mǎi)/O操作,提高查詢(xún)效率。這種方法包括如下步驟步驟1完全四叉樹(shù)空間劃分與先序四叉樹(shù)結(jié)點(diǎn)編碼;步驟2矢量數(shù)據(jù)前綴編碼和索引構(gòu)建;步驟3先序四叉樹(shù)索引。
文檔編號(hào)G06F17/30GK103092992SQ201310051629
公開(kāi)日2013年5月8日 申請(qǐng)日期2013年2月17日 優(yōu)先權(quán)日2013年2月17日
發(fā)明者胡斌, 劉熠, 胡秋翔, 羅青, 邵華 申請(qǐng)人:南京師范大學(xué)