R-Tree空间索引算法的研究历程和最新进展分析
摘要:本文介紹了空間索引的概念、R-Tree數(shù)據(jù)結(jié)構(gòu)和R-Tree空間索引的算法描述,并從R-Tree索引技術(shù)的優(yōu)缺點(diǎn)對R-Tree的改進(jìn)結(jié)構(gòu)——變種R-Tree進(jìn)行了論述。最后,對R-Tree的最新研究進(jìn)展進(jìn)行了分析。
關(guān)鍵詞:空間索引技術(shù);R-Tree;研究歷程;最新進(jìn)展
當(dāng)前數(shù)據(jù)搜索的一個(gè)關(guān)鍵問題是速度。提高速度的核心技術(shù)是空間索引。空間索引是由空間位置到空間對象的映射關(guān)系。當(dāng)前的一些大型數(shù)據(jù)庫都有空間索引能力,像Oracle,DB2。
空間索引技術(shù)并不單是為了提高顯示速度,顯示速度僅僅是它所要解決的一個(gè)問題。空間索引是為空間搜索提供一種合適的數(shù)據(jù)結(jié)構(gòu),以提高搜索速度。
空間索引技術(shù)的核心是:根據(jù)搜索條件,比如一個(gè)矩形,迅速找到與該矩形相交的所有空間對象集合。當(dāng)數(shù)據(jù)量巨大,矩形框相對于全圖很小時(shí),這個(gè)集合相對于全圖數(shù)據(jù)集大為縮小,在這個(gè)縮小的集合上再處理各種復(fù)雜的搜索,效率就會大大提高。
所謂空間索引,就是指依據(jù)空間實(shí)體的位置和形狀或空間實(shí)體之間的某種空間關(guān)系,按一定順序排列的一種數(shù)據(jù)結(jié)構(gòu),其中包含空間實(shí)體的概要信息如對象的標(biāo)識、外接矩形及指向空間實(shí)體數(shù)據(jù)的指針。簡單的說,就是將空間對象按某種空間關(guān)系進(jìn)行劃分,以后對空間對象的存取都基于劃分塊進(jìn)行。
1?引言
空間索引是對存儲在介質(zhì)上的數(shù)據(jù)位置信息的描述,用來提高系統(tǒng)對數(shù)據(jù)獲取的效率。空間索引的提出是由兩方面決定的:其一是由于計(jì)算機(jī)的體系結(jié)構(gòu)將存貯器分為內(nèi)存、外存?兩種,訪問這兩種存儲器一次所花費(fèi)的時(shí)間一般為30~40ns,8~10ms,可以看出兩者相差十?萬倍以上,盡管現(xiàn)在有“內(nèi)存數(shù)據(jù)庫”的說法,但絕大多數(shù)數(shù)據(jù)是存儲在外存磁盤上的,如果對磁盤上數(shù)據(jù)的位置不加以記錄和組織,每查詢一個(gè)數(shù)據(jù)項(xiàng)就要掃描整個(gè)數(shù)據(jù)文件,這種訪問磁盤的代價(jià)就會嚴(yán)重影響系統(tǒng)的效率,因此系統(tǒng)的設(shè)計(jì)者必須將數(shù)據(jù)在磁盤上的位置加以記錄和組織,通過在內(nèi)存中的一些計(jì)算來取代對磁盤漫無目的的訪問,才能提高系統(tǒng)的效率,尤其是GIS涉及的是各種海量的復(fù)雜數(shù)據(jù),索引對于處理的效率是至關(guān)重要的。其二是GIS?所表現(xiàn)的地理數(shù)據(jù)多維性使得傳統(tǒng)的B樹索引并不適用,因?yàn)?span style="font-family:'Times New Roman'">B樹所針對的字符、數(shù)字等傳統(tǒng)數(shù)據(jù)類型是在一個(gè)良序集之中,即都是在一個(gè)維度上,集合中任給兩個(gè)元素,都可以在這個(gè)維度上確定其關(guān)系只可能是大于、小于、等于三種,若對多個(gè)字段進(jìn)行索引,必須指定各個(gè)字段的優(yōu)先級形成一個(gè)組合字段,而地理數(shù)據(jù)的多維性,在任何方向上并不存在優(yōu)先級問題,因此B樹并不能對地理數(shù)據(jù)進(jìn)行有效的索引,所以需要研究特殊的能適應(yīng)多維特性的空間索引方式。
1984年Guttman發(fā)表了《R樹:一種空間查詢的動態(tài)索引結(jié)構(gòu)》,它是一種高度平衡的樹,由中間節(jié)點(diǎn)和頁節(jié)點(diǎn)組成,實(shí)際數(shù)據(jù)對象的最小外接矩形存儲在頁節(jié)點(diǎn)中,中間節(jié)點(diǎn)通過聚集其低層節(jié)點(diǎn)的外接矩形形成,包含所有這些外接矩形。其后,人們在此基礎(chǔ)上針對不同空間運(yùn)算提出了不同改進(jìn),才形成了一個(gè)繁榮的索引樹族,是目前流行的空間索引。
R樹是B樹向多維空間發(fā)展的另一種形式,它將空間對象按范圍劃分,每個(gè)結(jié)點(diǎn)都對應(yīng)一個(gè)區(qū)域和一個(gè)磁盤頁,非葉結(jié)點(diǎn)的磁盤頁中存儲其所有子結(jié)點(diǎn)的區(qū)域范圍,非葉結(jié)點(diǎn)的所有子結(jié)點(diǎn)的區(qū)域都落在它的區(qū)域范圍之內(nèi);葉結(jié)點(diǎn)的磁盤頁中存儲其區(qū)域范圍之內(nèi)的所有空間對象的外接矩形。每個(gè)結(jié)點(diǎn)所能擁有的子結(jié)點(diǎn)數(shù)目有上、下限,下限保證對磁盤空間的有效利用,上限保證每個(gè)結(jié)點(diǎn)對應(yīng)一個(gè)磁盤頁,當(dāng)插入新的結(jié)點(diǎn)導(dǎo)致某結(jié)點(diǎn)要求的空間大于一個(gè)磁盤頁時(shí),該結(jié)點(diǎn)一分為二。R樹是一種動態(tài)索引結(jié)構(gòu),即:它的查詢可與插入或刪除同時(shí)進(jìn)行,而且不需要定期地對樹結(jié)構(gòu)進(jìn)行重新組織。
2 R-Tree數(shù)據(jù)結(jié)構(gòu)
R-Tree是一種空間索引數(shù)據(jù)結(jié)構(gòu),下面做簡要介紹:
(1)R-Tree是n?叉樹,n稱為R-Tree的扇(fan)。
(2)每個(gè)結(jié)點(diǎn)對應(yīng)一個(gè)矩形。
(3)葉子結(jié)點(diǎn)上包含了小于等于n?的對象,其對應(yīng)的矩為所有對象的外包矩形。
(4)非葉結(jié)點(diǎn)的矩形為所有子結(jié)點(diǎn)矩形的外包矩形。
R-Tree的定義很寬泛,同一套數(shù)據(jù)構(gòu)造R-Tree,不同方可以得到差別很大的結(jié)構(gòu)。什么樣的結(jié)構(gòu)比較優(yōu)呢?有兩標(biāo)準(zhǔn):
(1)位置上相鄰的結(jié)點(diǎn)盡量在樹中聚集為一個(gè)父結(jié)點(diǎn)。
(2)同一層中各兄弟結(jié)點(diǎn)相交部分比例盡量小。
R樹是一種用于處理多維數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),用來訪問二維或者更高維區(qū)域?qū)ο蠼M成的空間數(shù)據(jù).R樹是一棵平衡樹。樹上有兩類結(jié)點(diǎn):葉子結(jié)點(diǎn)和非葉子結(jié)點(diǎn)。每一個(gè)結(jié)點(diǎn)由若干個(gè)索引項(xiàng)構(gòu)成。對于葉子結(jié)點(diǎn),索引項(xiàng)形如(Index,Obj_ID)。其中,Index表示包圍空間數(shù)據(jù)對象的最小外接矩形MBR,Obj_ID標(biāo)識一個(gè)空間數(shù)據(jù)對象。對于一個(gè)非葉子結(jié)點(diǎn),它的索引項(xiàng)形如(Index,Child_Pointer)。?Child_Pointer?指向該結(jié)點(diǎn)的子結(jié)點(diǎn)。Index仍指一個(gè)矩形區(qū)域,該矩形區(qū)域包圍了子結(jié)點(diǎn)上所有索引項(xiàng)MBR的最小矩形區(qū)域。一棵R樹的示例如圖所示:
3 R-Tree算法描述
算法描述如下:
對象數(shù)為n,扇區(qū)大小定為fan。
(1)估計(jì)葉結(jié)點(diǎn)數(shù)k=n/fan。
(2)將所有幾何對象按照其矩形外框中心點(diǎn)的x值排序。
(3)將排序后的對象分組,每組大小為?*fan,最后一組可能不滿員。
(4)上述每一分組內(nèi)按照幾何對象矩形外框中心點(diǎn)的y值排序。
(5)排序后每一分組內(nèi)再分組,每組大小為fan。
(6)每一小組成為葉結(jié)點(diǎn),葉子結(jié)點(diǎn)數(shù)為nn。
(7)N=nn,返回1。
4 R-Tree空間索引算法的研究歷程
1 R-Tree
多維索引技術(shù)的歷史可以追溯到20世紀(jì)70年代中期。就在那個(gè)時(shí)候,諸如Cell算法、四叉樹和k-d樹等各種索引技術(shù)紛紛問世,但它們的效果都不盡人意。在GIS和CAD系統(tǒng)對空間索引技術(shù)的需求推動下,Guttman于1984年提出了R樹索引結(jié)構(gòu),發(fā)表了《R樹:一種空間查詢的動態(tài)索引結(jié)構(gòu)》,它是一種高度平衡的樹,由中間節(jié)點(diǎn)和頁節(jié)點(diǎn)組成,實(shí)際數(shù)據(jù)對象的最小外接矩形存儲在頁節(jié)點(diǎn)中,中間節(jié)點(diǎn)通過聚集其低層節(jié)點(diǎn)的外接矩形形成,包含所有這些外接矩形。其后,人們在此基礎(chǔ)上針對不同空間運(yùn)算提出了不同改進(jìn),才形成了一個(gè)繁榮的索引樹族,是目前流行的空間索引。
2 R+樹
在Guttman的工作的基礎(chǔ)上,許多R樹的變種被開發(fā)出來,?Sellis等提出了R+樹,R+樹與R樹類似,主要區(qū)別在于R+樹中兄弟結(jié)點(diǎn)對應(yīng)的空間區(qū)域無重疊,這樣劃分空間消除了R樹因允許結(jié)點(diǎn)間的重疊而產(chǎn)生的“死區(qū)域”(一個(gè)結(jié)點(diǎn)內(nèi)不含本結(jié)點(diǎn)數(shù)據(jù)的空白區(qū)域),減少了無效查詢數(shù),從而大大提高空間索引的效率,但對于插入、刪除空間對象的操作,則由于操作要保證空間區(qū)域無重疊而效率降低。同時(shí)R+樹對跨區(qū)域的空間物體的數(shù)據(jù)的存儲是有冗余的,而且隨著數(shù)據(jù)庫中數(shù)據(jù)的增多,冗余信息會不斷增長。Greene也提出了他的R樹的變種。
3 R*樹
在1990年,Beckman和Kriegel提出了最佳動態(tài)R樹的變種——R*樹。R*樹和R樹一樣允許矩形的重疊,但在構(gòu)造算法R*樹不僅考慮了索引空間的“面積”,而且還考慮了索引空間的重疊。該方法對結(jié)點(diǎn)的插入、分裂算法進(jìn)行了改進(jìn),并采用“強(qiáng)制重新插入”的方法使樹的結(jié)構(gòu)得到優(yōu)化。但R*樹算法仍然不能有效地降低空間的重疊程度,尤其是在數(shù)據(jù)量較大、空間維數(shù)增加時(shí)表現(xiàn)的更為明顯。R*樹無法處理維數(shù)高于20的情況。
4 QR樹
QR樹利用四叉樹將空間劃分成一些子空間,在各子空間內(nèi)使用許多R樹索引,從而改良索引空間的重疊。QR樹結(jié)合了四叉樹與R樹的優(yōu)勢,是二者的綜合應(yīng)用。實(shí)驗(yàn)證明:與R樹相比,QR樹以略大(有時(shí)甚至略小)的空間開銷代價(jià),換取了更高的性能,且索引目標(biāo)數(shù)越多,QR樹的整體性能越好。
5 SS樹
SS樹對R*樹進(jìn)行了改進(jìn),通過以下措施提高了最鄰近查詢的性能:用最小邊界圓代替最小邊界矩形表示區(qū)域的形狀,增強(qiáng)了最鄰近查詢的性能,減少將近一半存儲空間;SS樹改進(jìn)了R*樹的強(qiáng)制重插機(jī)制。當(dāng)維數(shù)增加到5是,R樹及其變種中的邊界矩形的重疊將達(dá)到90%,因此在高維情況(≧5)下,其性能將變的很差,甚至不如順序掃描。
6 X樹
X樹是線性數(shù)組和層狀的R樹的雜合體,通過引入超級結(jié)點(diǎn),大大地減少了最小邊界矩形之間的重疊,提高了查詢效率。X樹用邊界圓進(jìn)行索引,邊界矩形的直徑(對角線)比邊界圓大,SS樹將點(diǎn)分到小直徑區(qū)域。由于區(qū)域的直徑對最鄰近查詢性能的影響較大,因此SS樹的最鄰近查詢性能優(yōu)于R*樹;邊界矩形的平均容積比邊界圓小,R*樹將點(diǎn)分到小容積區(qū)域;由于大的容積會產(chǎn)生較多的覆蓋,因此邊界矩形在容積方面要優(yōu)于邊界圓。SR樹既采用了最小邊界圓(MBS),也采用了最小邊界矩形(MBR),相對于SS樹,減小了區(qū)域的面積,提高了區(qū)域之間的分離性,相對于R*樹,提高了鄰近查詢的性能。
5 R-Tree空間索引算法的最新研究
信息的膨脹使數(shù)據(jù)庫檢索需要面對的問題越來越多。在構(gòu)建索引方面,最主要面臨的則是如何構(gòu)造高效的索引算法來支持各種數(shù)據(jù)庫系統(tǒng)(比如:多媒體數(shù)據(jù)庫、空間數(shù)據(jù)庫等),特別是如何有效的利用算法來實(shí)現(xiàn)加速檢索。概括地說,R-Tree空間索引算法的研究要做到:支持高維數(shù)據(jù)空間;有效分割數(shù)據(jù)空間,來適應(yīng)索引的組織;高效的實(shí)現(xiàn)多種查詢方式系統(tǒng)中的統(tǒng)一。R-Tree的索引結(jié)構(gòu)最新研究不能是單純?yōu)榱思铀倌撤N查詢方式或提高某個(gè)方面的性能,忽略其他方面的效果,這樣可能會造成更多不必要的性能消耗。
XML作為可擴(kuò)展的標(biāo)示語言,其索引方法就是基于傳統(tǒng)的R-Tree索引技術(shù)的XR-Tree索引方法。該方法構(gòu)造了適合于XML數(shù)據(jù)的索引結(jié)構(gòu)。XR-Tree索引方法是一種動態(tài)擴(kuò)充內(nèi)存的索引數(shù)據(jù)結(jié)構(gòu),針對XISS(XML Indexing and Storage System:XML索引和存儲體系)中結(jié)構(gòu)連接中的問題,設(shè)計(jì)了基于XR-Tree索引樹有效地跳過不參與匹配的元素的連接算法。但這種索引方法在進(jìn)行路徑的連接運(yùn)算中仍然存儲大量的中間匹配結(jié)果,為此一種基于整體查詢模式的基于索引的路徑連接算法提出,即利用堆棧鏈表來臨時(shí)壓棧存儲產(chǎn)生的部分匹配結(jié)果,并且隨著匹配的動態(tài)進(jìn)行出棧操作。這樣在查詢連接處理完成以后,直接輸出最終結(jié)果,既節(jié)省了存儲空間又提高了操作效率。
詳細(xì)參考:http://www.codes51.com/article/detail_100321.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的R-Tree空间索引算法的研究历程和最新进展分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python单例模式的4种实现方法
- 下一篇: 条款11 在operator=中处理“自