何 珍 文,鄭 祖 芳,劉 剛,吳 沖 龍
動態(tài)廣義表空間索引方法
何 珍 文,鄭 祖 芳,劉 剛,吳 沖 龍
(中國地質(zhì)大學(xué)(武漢)計算機(jī)學(xué)院,湖北 武漢 430074)
提出了一種新的動態(tài)空間索引結(jié)構(gòu)X-Lists,設(shè)計實(shí)現(xiàn)了X-Lists的動態(tài)插入、動態(tài)刪除、查找等算法,并進(jìn)行了算法實(shí)驗。X-Lists是一種支持高維點(diǎn)查詢和區(qū)域查詢的廣義表,實(shí)驗表明,X-Lists在索引構(gòu)建與區(qū)域查找方面性能明顯優(yōu)于現(xiàn)有R-Tree及其改進(jìn)索引結(jié)構(gòu)。
空間索引;R樹;廣義表;X-Lists
高效的多維空間索引是海量多維空間數(shù)據(jù)存儲管理與有效調(diào)度的基礎(chǔ)。由于空間數(shù)據(jù)的海量性及空間查詢的高度復(fù)雜性,如何建立高效的多維空間索引實(shí)現(xiàn)海量空間數(shù)據(jù)的快速調(diào)度一直是人們研究的重點(diǎn)與難點(diǎn)問題之一。近30年眾多學(xué)者提出了多種空間索引方法[1-3],大致可分為線性索引、網(wǎng)格索引和樹形索引三大類(圖1),但目前研究使用最廣泛的三維空間索引依然是R樹系列索引方法。
線性索引是一種最直觀簡單的索引,但在大型空間數(shù)據(jù)庫中訪問效率較低,較少被采用。網(wǎng)格索引是將研究區(qū)域縱橫分成若干個均等的小塊,每小塊都作為一個桶,將落在該小塊內(nèi)的地物對象放入該小塊對應(yīng)的桶中。當(dāng)用戶進(jìn)行查詢時,首先計算出用戶查詢對象所在格網(wǎng),然后在該網(wǎng)格中快速查詢所選空間實(shí)體。目前在3DGIS中常被用作一級索引與R樹系列索引混合使用[3]。目前絕大部分的空間索引都是樹形索引(圖1),并且高維索引大都基于R-Tree[4]。R-Tree奠定了高維空間索引的技術(shù)架構(gòu)[5],是目前應(yīng)用最為廣泛的一種空間索引結(jié)構(gòu),許多商用空間數(shù)據(jù)庫系統(tǒng)(如Oracle Spatial、IBM DB2 Spatial DataBlade、MySQL Spatial Extensions和MapInfo Spatial Ware等)均提供對R-Tree的支持,開放源碼系統(tǒng)PostgreSQL也實(shí)現(xiàn)了R-Tree。近20多年來,許多學(xué)者致力于R-Tree的研究,在R-Tree的基礎(chǔ)上衍生出了許多變種,比較典型的有R+-Tree[6]、R*-Tree[7]、壓 縮 R-Tree[8]、Hilbert RTree[9]、ER*-Tree[10]、CSR-Tree[1,2]等。
圖1 空間索引方法分類[3]Fig.1 Classification of spatial index method
目前大量使用和研究的多維空間索引依然是以R-Tree及其衍生索引結(jié)構(gòu)為主。廣義表是一種非線性數(shù)據(jù)結(jié)構(gòu),是線性表和樹的推廣,被廣泛應(yīng)用于多項式處理、DNA計算機(jī)、表處理語言LISP、人工智能等領(lǐng)域。2010年,筆者對基于廣義表的三維空間索引進(jìn)行了研究,提出了R-Lists[11]空間索引結(jié)構(gòu),其邊界矩形采用三維矩形,沒有給出該結(jié)構(gòu)實(shí)現(xiàn)的具體輔助算法。
本文以R-Lists為基礎(chǔ),對基于廣義表的動態(tài)空間索引結(jié)構(gòu)進(jìn)行了研究,提出了一種新的動態(tài)索引結(jié)構(gòu)X-Lists,設(shè)計實(shí)現(xiàn)了X-Lists的動態(tài)插入、動態(tài)刪除、查找等算法,并進(jìn)行了算法實(shí)驗。研究表明:在內(nèi)存空間占用方面,X-Lists的構(gòu)建性能明顯優(yōu)于R-Tree和CSR-Tree;在索引構(gòu)建時間方面,X-Lists與 R-Tree相 當(dāng),優(yōu) 于 R*-Tree和 CSR-Tree;XLists的查詢性能在時間和空間占用上均明顯優(yōu)于R-Tree和CSR-Tree;X-Lists能有效地支持高維點(diǎn)查詢和區(qū)域查詢,具有廣義表的一般屬性及其優(yōu)良性質(zhì),在具有高效的空間索引性能的同時,將更有利于對大規(guī)模空間數(shù)據(jù)集進(jìn)行空間關(guān)系推理,或?qū)榛谒饕Y(jié)構(gòu)的空間關(guān)系的智能推理提供新的實(shí)現(xiàn)思路和方法。
廣義表一般記為:
其中:GL(Generalized List)是廣義表名稱,n是其長度,ei是GL的一個元素,可以是原子(Atom)或子表(Sublist),這就決定了廣義表的遞歸結(jié)構(gòu)。X-Lists是一種帶有最小包圍邊界并限定了表長度的廣義表。這里的X代表單個或多個空間對象的任意形狀的可進(jìn)行疊置(Overlap)運(yùn)算的最小包圍體,常用的是超維最小邊界矩形(MRB)、超球體或超維凸包體等。在高維點(diǎn)查詢中一般采用超球體具有較高效率,在區(qū)域查詢中一般采用多維最小邊界矩形。在本文的算法實(shí)現(xiàn)中,如果沒有特殊說明,最小包圍體用最小邊界矩形(MRB)表示。
在X-Lists中,每個原子元素對應(yīng)一個空間對象SOj,記為:
其中:X=(X0,X1,…,Xd-1)是一個d維最小包圍體,d是空間維度;SO_Identifier代表空間數(shù)據(jù)庫中空間對象的唯一標(biāo)識,在實(shí)現(xiàn)過程中一般采用空間對象ID或指針表示。對于X-Lists的子表,則對應(yīng)一個約束在一定空間范圍的空間對象集合或者集合的集合,記為:
如果X代表矩形,以 Guttman[4]給出的R-Tree的示例數(shù)據(jù)為例,且令m=3,則采用X-Lists表示廣義表XL為:
采用擴(kuò)展線性存儲方式,XL的存儲結(jié)構(gòu)如圖2所示,標(biāo)有數(shù)字的為原子,標(biāo)有圓圈的為子表。
圖2 Guttman示例數(shù)據(jù)對應(yīng)的X-ListsFig.2 X-Lists for Guttman′s sample data
為了便于查找與更新實(shí)現(xiàn),本文對擴(kuò)展線性存儲方式采用了雙向鏈表形式,如果需要節(jié)省空間,也可以采用單向鏈表實(shí)現(xiàn)。后面的相關(guān)算法采用的是雙向鏈表的實(shí)現(xiàn)方式。采用雙向鏈表的擴(kuò)展線性存儲方式,X-Lists中的節(jié)點(diǎn)元素用C?語言描述如下:
其中:模板參數(shù)MBXVALUETYPE表示包圍盒的分量類型,一般為float或double型;NUMDIMS表示空間維數(shù);OBJTYPE表示空間對象或其唯一標(biāo)識類型,當(dāng)X-Lists用于文件系統(tǒng)時,OBJTYPE是一個帶有文件指針和偏移位置信息的結(jié)構(gòu)體,為闡述方便,本文將其定義為int型;Element的prev和next成員變量用于雙向鏈表指針;type表示元素類型,如果為0表示原子,為1表示子表;當(dāng)類型為原子元素時,obj用于唯一標(biāo)識空間對象;當(dāng)類型為子表時,sublist指向子表的頭節(jié)點(diǎn);bound表示子表或原子的最小包圍邊界,可以是超矩形或超球體等,本文采用對象Bound Box實(shí)現(xiàn),只要實(shí)現(xiàn)了Bound Box的overlap、union等相關(guān)虛函數(shù)的幾何實(shí)體都可以在X-Lists中使用,提高了X-Lists的可擴(kuò)展性。
查找與更新算法是索引的核心算法,其效率直接決定索引的性能好壞。本文重點(diǎn)討論X-Lists索引結(jié)構(gòu)的查找、動態(tài)插入、動態(tài)刪除等算法。假定空間對象的 MBX的集合為R={Ri|i∈[0,n]},當(dāng)前待處理的 X-Lists為CXL={C0,C1,…,Cj,…,Ck},其中0≤j≤k,且k<m。
查找算法(Searching)即在X-Lists中查找符合給定條件的原子元素。最常用的查詢是空間范圍查詢,也即給定一個待查詢的MBX值S,查詢X-Lists中有哪些原子元素落在MBX中。設(shè)CXL的頭指針為H,由于X-Lists是一種遞歸結(jié)構(gòu),因此,查找算法可以采用遞歸方式描述如下:
[Searching]
(1)以H為頭指針,向后遍歷鏈表,訪問每個元素Cj;
(2)如果Cj對應(yīng)的MBX與S相交,則進(jìn)一步判斷Cj的類型:如果是原子,則直接將Cj添加到查找結(jié)果列表中,如果是子表,以子表的頭指針為H,遞歸調(diào)用查找算法[Searching];
(3)如果Cj對應(yīng)的MBX與S不相交,則指針后移一個元素,重復(fù)步驟2,直到j(luò)等于k為止。
插入算法(Insert)是X-Lists的關(guān)鍵,是一種動態(tài)插入算法,設(shè)當(dāng)前的X-Lists為CXL,其中已有k+1個元素?,F(xiàn)要在集合R中依次取出一個元素,順次插入CXL中。
[Insert]
(1)設(shè)當(dāng)前取出的元素Ri∈R,首先計算Ri與C是否相交;
(2)如果不相交,并且k<m-1,則將Ri作為CXL的表尾元素添加;
(3)如果不相交,并且k=m-1,則將CXL作為表頭,Ri作為表尾,構(gòu)建新的表,重新記為CXL;
(4)如果相交,并且存在Cj與Ri相交,則將Ri與Cj合并成新的Cj;這個合并過程是一個將Ri遞歸插入Cj中的過程,其終止條件是Ri插入Cj中的與Ri相交的子表中,或者直接成為Cj的原子元素,使得Cj本身也是一個X-Lists;
(5)如果相交,并且在CXL中不存在任何元素與Ri相交,若k<m-1,則將Ri作為C的表尾元素添加;若k=m-1,則將CXL作為表頭,Ri作為表尾,構(gòu)建新的表,重新記為CXL,并調(diào)用[AdjustInsert]算法調(diào)整列表CXL;
(6)重復(fù)上述步驟,完成R集合的插入,也即完成X-Lists的構(gòu)建過程。
按照上述插入算法,圖2中R8至R19的插入過程如下(當(dāng)前插入元素用黑體表示):
X-Lists的刪除分為兩種:第一種是給定一個空間對象的唯一標(biāo)識,在列表中刪除該元素節(jié)點(diǎn);第二種是給定一個區(qū)域,刪除列表中所有落在該區(qū)域中的元素節(jié)點(diǎn),其可以由第一種算法多次執(zhí)行得到。本文重點(diǎn)討論第一種動態(tài)刪除算法。
[Delete]
(1)設(shè)CXL中要刪除的空間對象為obj,調(diào)用[FindPath]算法,得到obj的路徑棧S;
(2)如果[FindPath]查找失敗,則表明CXL中沒有obj元素,直接返回,否則繼續(xù);
(3)取出S的棧頂元素,賦值給head,pNode;
(4)如果S為空,則pNode是頂層表元素,在該層雙向鏈表中刪除節(jié)點(diǎn)pNode,重新計算總體包圍邊界;
(5)如果S不為空,則取S棧頂元素,賦值給pParentNode,則pParentNode是pNode的父表元素;
(6)在pNode所在的同級鏈表中刪除pNode,并獲取其頭節(jié)點(diǎn)head,令pParentNode→sublist指向h;
(7)如果head所在鏈表只有一個元素,則用head替換pParentNode,該步可以直接調(diào)用[AdjustDelete]算法實(shí)現(xiàn);
(8)將S中的所有元素順次彈出,計算調(diào)整各個父表元素的包圍邊界,最后計算調(diào)整總包圍邊界后返回,該步可以直接調(diào)用[Adjust Boundary]算法實(shí)現(xiàn)。
在X-Lists中除了上述的查找(Searching)、刪除(Delete)、插入(Insert)3個主要算法外,還有一些輔助算法。
2.4.1 元素定位 定位算法(Find)主要實(shí)現(xiàn)在XLists中查找指定的空間對象所在的元素位置。設(shè)要定位的空間對象唯一標(biāo)識為obj,需要返回obj對應(yīng)的節(jié)點(diǎn)元素element及其父表元素parent_element,具體算法描述如下:
2.4.2 路徑定位 路徑定位(FindPath)算法用于實(shí)現(xiàn)在一個X-Lists中查找指定的空間對象所在位置及從節(jié)點(diǎn)上溯到最頂層父表的所有各層級的父表元素構(gòu)成的路徑。為實(shí)現(xiàn)該算法,首先實(shí)現(xiàn)[Find-Parents]算法。設(shè)要定位的空間對象為obj,當(dāng)前列表的頭節(jié)點(diǎn)為head,head的上級父表節(jié)點(diǎn)為head_parent,采用棧結(jié)構(gòu)存儲父表節(jié)點(diǎn)路徑。
(8)如果上述步驟都無最終返回TRUE,則將棧頂元素出棧,返回FALSE。
(9)返回的棧內(nèi)元素即為obj節(jié)點(diǎn)的各層級的父節(jié)點(diǎn)元素。
該算法采用遞歸方式實(shí)現(xiàn)了obj各個層級的父表節(jié)點(diǎn),但在棧內(nèi)沒有包含obj節(jié)點(diǎn),[FindPath]算法則在此基礎(chǔ)上將obj找到,并壓棧處理。具體算法描述如下:
2.4.3 調(diào)整算法 調(diào)整算法[Adjust]主要針對XLists的動態(tài)插入、刪除過程中出現(xiàn)的一些異常情況進(jìn)行處理和優(yōu)化,是一個算法集合。在X-Lists的更新中常會涉及節(jié)點(diǎn)的包圍邊界的調(diào)整問題,本文給出指定節(jié)點(diǎn)邊界調(diào)整算法[AdjustBoundary],該算法的輸入?yún)?shù)是一個路徑棧,棧頂元素為當(dāng)前改動邊界范圍的節(jié)點(diǎn)元素。
(7)如果S不為空,重復(fù)執(zhí)行步驟3~7,直到S為空;
(8)遍歷pNextTopNode所在鏈表,重新計算每個元素的邊界之和,賦值給X-Lists總邊界范圍。
上述邊界調(diào)整算法相對比較簡單,可以單獨(dú)成函數(shù)供調(diào)用,也可以在插入、刪除中直接嵌入。為了敘述清晰,在邊界調(diào)整的地方直接調(diào)用[Adjust-Boundary]。
圖3a顯示的是圖2的局部,如果刪除R14節(jié)點(diǎn),則以R13為頭的鏈表只有一個節(jié)點(diǎn),不符合X-Lists性質(zhì),需要進(jìn)行調(diào)整,即把R13升級為其父表元素,并調(diào)整上層的包圍邊界,如圖3b所示。刪除過程中的調(diào)整算法描述如下:
(4)以S為參數(shù),調(diào)用[AdjustBoundary]調(diào)整相關(guān)節(jié)點(diǎn)的包圍邊界;
(5)用pSubNode節(jié)點(diǎn)替換pNode節(jié)點(diǎn)。
圖3 刪除過程中的異常情況Fig.3 Anomalies in the process of deletion
圖4顯示了插入過程中經(jīng)常出現(xiàn)一種異常情況。以圖2所示的數(shù)據(jù)為例,如果R17先于R10插入,按照[Insert]的步驟5,則會出現(xiàn)如圖4a所示情況,顯然不如圖4b所示的狀況好,因為R8、R9、R17構(gòu)成的包圍邊界范圍遠(yuǎn)大于R8、R9、R10構(gòu)成的邊界范圍,如果不進(jìn)行調(diào)整,會大大增加X-Lists中節(jié)點(diǎn)重疊率和X-Lists的深度。調(diào)整的原則是使各個節(jié)點(diǎn)對應(yīng)的子表的邊界范圍盡可能最小。這種異常情況一般出現(xiàn)在[Insert]算法的步驟5中,設(shè)當(dāng)前節(jié)點(diǎn)為pNode,待插入的節(jié)點(diǎn)為element(對應(yīng)圖4a中的R10),如果element→bound與pNode→bound有重疊,不與pNode子表中的任何元素有重疊,并且pNode子表中的元素個數(shù)已經(jīng)達(dá)到最大節(jié)點(diǎn)數(shù)m,在這種情況下則需要進(jìn)行插入調(diào)整。
圖4 插入過程中的異常情況Fig.4 Anomalies in the process of inserting
針對這種情況,調(diào)整算法設(shè)計如下:
為驗證算法的有效性,對本文提出的算法進(jìn)行了實(shí)驗。實(shí)驗設(shè)備為Sony VGN-SR48J,Intel Core2 Duo CPU 2.53 GHz,內(nèi)存2 GB,操作系統(tǒng)為 Windows XP。由于CSR-Tree是以R*-Tree為基類實(shí)現(xiàn)的,其性能高于R*-Tree,為此,本文選擇R-Tree和CSR-Tree與X-Lists進(jìn)行對比分析,分別對RTree、CSR-Tree和X-Lists的構(gòu)建算法和查找算法的時間和空間性能進(jìn)行了測試。
測試數(shù)據(jù)集為隨機(jī)生成數(shù)據(jù)。X-Lists和RTree一樣,是一種動態(tài)多維空間索引結(jié)構(gòu),可以適用于高維查詢,本文重點(diǎn)對三維數(shù)據(jù)集進(jìn)行測試,結(jié)果見表1。
表1 X-Lists、R-Tree與CSR-Tree測試結(jié)果Table 1 Experimental results of X-Lists,R-Tree and CSR-Tree
為了更清楚地看出效率差異,將上述數(shù)據(jù)處理成折線圖,見圖5~圖7。圖5顯示了R-Tree、CSRTree和X-Lists 3種索引結(jié)構(gòu)的創(chuàng)建時間對比,隨著空間對象個數(shù)的增加,X-Lists與R-Tree創(chuàng)建索引的效率基本相當(dāng),CSR-Tree由于需要進(jìn)行聚類、排序操作,所以CSR-Tree的創(chuàng)建耗時要明顯大于XLists和R-Tree。圖6顯示了R-Tree、CSR-Tree和X-Lists 3種索引占用內(nèi)存空間情況的比較。由于CSR-Tree對數(shù)據(jù)集進(jìn)行了聚類排序處理,因此CSR-Tree中的節(jié)點(diǎn)重疊率明顯低于R-Tree。因此,對于同樣的數(shù)據(jù)集,CSR-Tree的節(jié)點(diǎn)數(shù)要小于RTree,也即其內(nèi)存占用量小于R-Tree的內(nèi)存占用量,其節(jié)點(diǎn)數(shù)或內(nèi)存占用量與空間對象數(shù)基本呈正比。X-Lists針對同一數(shù)據(jù)集創(chuàng)建的索引內(nèi)存占用量小于CSR-Tree,明顯優(yōu)于 R-Tree,如圖6所示。圖7是 R-Tree、CSR-Tree和 X-Lists 3種索引查詢效率的比較。由于CSR-Tree是對R*-Tree的改進(jìn),隨著數(shù)據(jù)量的增加,CSR-Tree相對于R-Tree的查詢優(yōu)勢會變大。對于同樣的隨機(jī)數(shù)據(jù)集和同樣的區(qū)域查詢,X-Lists查詢性能明顯高于CSR-Tree和R-Tree(圖7)。
圖5 索引創(chuàng)建耗時Fig.5 The time cost of index creation
本文對基于廣義表的動態(tài)空間索引結(jié)構(gòu)進(jìn)行了研究,提出了一種新的動態(tài)索引結(jié)構(gòu)X-Lists,設(shè)計實(shí)現(xiàn)了X-Lists的動態(tài)插入、動態(tài)刪除、查找等算法,并進(jìn)行了算法實(shí)驗,結(jié)果表明:在內(nèi)存空間占用方面,X-Lists的構(gòu)建性能明顯優(yōu)于R-Tree和CSRTree;在索引構(gòu)建時間方面,X-Lists與 R-Tree相當(dāng),優(yōu)于R*-Tree和CSR-Tree;X-Lists的查詢性能在時間和空間占用上均明顯優(yōu)于R-Tree和CSRTree。
此外,X-Lists是一種廣義表,R-Tree是 X-Lists的一個子集,能支持高維點(diǎn)查詢和區(qū)域查詢。由于廣義表的優(yōu)良性質(zhì),X-Lists在具有高效的空間索引性能的同時,更有利于對大規(guī)??臻g數(shù)據(jù)集進(jìn)行空間關(guān)系推理,或?qū)榛谒饕Y(jié)構(gòu)的空間關(guān)系的智能推理提供新的實(shí)現(xiàn)思路和方法。
[1]何珍文.泛型聚類排序3DR樹批量構(gòu)建算法[J].地理與地理信息科學(xué),2009,25(3):12-15.
[2]HE Z W,WU C L,WANG C.Clustered sorting R-Tree:An index for multi-dimensional spatial objects[A].GUO M Z,ZHAO L,WANG L P.Proceedings of 4th International Conference on Natural Computation(ICNC 2008)[C].Jinan:IEEE Computer SOC,2008.348-352.
[3]何珍文.地質(zhì)空間三維動態(tài)建模關(guān)鍵技術(shù)[D].華中科技大學(xué),2008.
[4]GUTTMAN A.R-Trees:A dynamic index structure for spatial searching[A].YOUMARK B.Proc.of the ACM Int′l Conf.on Management of Data[C].Boston:ACM Press,1984.47-57.
[5]張軍旗,周向東,王梅,等.基于聚類分解的高維度量空間索引B+-Tree[J].軟件學(xué)報,2008,19(6):1401-1412.
[6]SELLIS T,ROUSSOPOULOS N,F(xiàn)ALOUTSOS C.The R+-Tree:A dynamic index for multi-dimensional objects[A].VLDB[C].1987.507-518.
[7]BECKMANN N,KRIEGEL H P,SCHNEIDER R,et al.The R*-tree:An efficient and robust access method for points and rectangles[A].CLIFFORD J,KING R.Proceedings of the ACM SIGMOD International Conference on the Management of Data[C].Denver,Colorado:ACM Press,1991.322-331.
[8]KAMEL I,F(xiàn)ALOUTSOS C.On packing R-Trees[A].BHARAT B,TIM F,YELENA Y.Proceeding of the 2nd Conference on Information and Knowledge Management (CIKM)[C].Washington DC,1993.490-499.
[9]KAMEL I,F(xiàn)ALOUTSOS C.Hilbert R-Tree:An improved R
Tree using fractals[A].BOCCA J B.Proceedings of the 20th International Conference on Very Large DataBases[C].San Francisco:Morgan Kaufmann Publishers Inc,1995.500-509.
[10]周學(xué)海,李曦,龔育昌,等.多維向量動態(tài)索引結(jié)構(gòu)研究[J].軟件學(xué)報,2002,13(4):768-773.
[11]HE Z W,LIU G,WU C L.R-Lists:A dynamic spatial index structure based on generalized lists[A].2th International Conference on Future Computer and Communication[C].2010,9(2):553-556.
Dynamic Generalized List Spatial Index Method
HE Zhen-wen,ZHENG Zu-fang,LIU Gang,WU Chong-long
(SchoolofComputer,ChinaUniversityofGeosciences,Wuhan430074,China)
A new dynamic spatial indexing structure named X-Lists has been presented in this paper.The X-Lists algorithms including the dynamic insertion,dynamic deletion and searching algorithms have been designed and implemented,and the algorithm experiments have been carried out.X-Lists is a type of generalized lists which supports multi-dimensional point query and range query.Experimental results show that,X-Lists in the two aspects of construction and regional searching is superior to the existing R-Tree index structure and its improvement index structures.
spatial index;R-Tree;generalized lists;X-Lists
P208
A
1672-0504(2011)05-0009-07
2011-03- 18;
2011-05-06
國家自然科學(xué)基金項目(41101368);教育部高校博士點(diǎn)基金項目(20100145110009);中央高校基本科研業(yè)務(wù)費(fèi)專項資金資助項目
何珍文(1978-),男,博士,副教授,主要研究領(lǐng)域為數(shù)據(jù)庫技術(shù)、空間信息科學(xué)與技術(shù)。E-mail:zwhe@foxmail.com