本發(fā)明涉及數(shù)據(jù)查詢技術領域,特別涉及一種基于iDisdance的P2P空間數(shù)據(jù)查詢方法及系統(tǒng)。
背景技術:
范圍查詢即檢索與某個給定對象q的距離小于某個門限的所有數(shù)據(jù)。KNN查詢即檢索與某個給定對象q的距離最近的k個對象。由于范圍查詢和KNN查詢涉及到大量的距離計算,而大部分查詢算法都是針對集中式計算環(huán)境的,因此很容易形成性能瓶頸。
P2P系統(tǒng)在規(guī)模性,可用性,可擴展性等方面表現(xiàn)出來的優(yōu)勢使得如何在P2P環(huán)境下支持空間查詢成為近年來的研究熱點并出現(xiàn)了一些研究成果。針對P2P環(huán)境下范圍查詢和KNN查詢的有MCAN,M-Chord,SIMPEER等。其中MCAN是利用一種基于pivot的技術將所有數(shù)據(jù)對象映射到向量空間中,M-Chord是利用iDisdance將數(shù)據(jù)對象映射到一維空間。SIMPEER的主要思想是將系統(tǒng)分為若干個組,每個組由一個超級節(jié)點管理一定數(shù)量的數(shù)據(jù)節(jié)點。每個數(shù)據(jù)節(jié)點將本地數(shù)據(jù)的簇信息發(fā)送給本組的超級節(jié)點,并由它通過這些簇信息建立本組的iDistance索引。前兩種方法會出現(xiàn)由于DHT造成的空間數(shù)據(jù)的物理特性丟失,而SIMPEER最大的不足在于每次查詢都需要在超級節(jié)點之間多播,增加了系統(tǒng)的網(wǎng)絡通信開銷,使得系統(tǒng)難以擴展。
技術實現(xiàn)要素:
有鑒于此,本發(fā)明提出一種能夠能有效地過濾不必要的查詢消息,從而降低空間查詢的開銷的基于iDisdance的P2P空間數(shù)據(jù)查詢方法及系統(tǒng)。
一種基于iDisdance的P2P空間數(shù)據(jù)查詢方法,其包括如下步驟:
S1、構(gòu)造基于分組Chord#的P2P空間數(shù)據(jù)查詢系統(tǒng):
針對每個數(shù)據(jù)源節(jié)點對應存儲的空間數(shù)據(jù)維護一個或多個本地空間數(shù)據(jù)邊界矩形LSD-MBR;將所有數(shù)據(jù)源節(jié)點依據(jù)功能劃分為路由節(jié)點和數(shù)據(jù)節(jié)點,分別用Route_peer和Data_peer表示;其中Data_peer是指僅負責根據(jù)本地數(shù)據(jù)計算查詢的數(shù)據(jù)源節(jié)點,Route_peer是指從Data_peer中挑選出來的負責根據(jù)索引信息路由查詢消息的數(shù)據(jù)源節(jié)點;各數(shù)據(jù)源節(jié)點將LSD-MBR的中心作為數(shù)據(jù)源節(jié)點本身的代表點,用于通過代表點來決定節(jié)點在數(shù)據(jù)空間中的位置,從而決定在覆蓋網(wǎng)絡中的位置;
S2、構(gòu)造基于節(jié)點簇的iDistance索引:將空間數(shù)據(jù)劃分成若干個數(shù)據(jù)簇;將分組內(nèi)所有節(jié)點的數(shù)據(jù)簇作為點數(shù)據(jù),并將點數(shù)據(jù)的分布信息發(fā)送給本組的Route_peer,由Route_peer根據(jù)分布信息再次生成聚類并建立iDistance索引,形成節(jié)點簇;在子空間選取幾個固定的參考點,讓路由節(jié)點根據(jù)自身維護的數(shù)據(jù)簇距離固定參考點的遠近來將其劃分到不同的節(jié)點簇;
S3、基于iDistance索引進行組內(nèi)節(jié)點定位:當一個以q為中心,r為半徑的范圍查詢到達目的地分組后,由該分組的Route_peer首先根據(jù)節(jié)點簇的參考點與半徑判斷是否屬于被搜索的范圍;如果屬于,則通過該節(jié)點簇中各數(shù)據(jù)簇的索引信息判斷哪些數(shù)據(jù)簇需要被搜索,并將查詢轉(zhuǎn)發(fā)給這些數(shù)據(jù)簇的數(shù)據(jù)源節(jié)點。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢方法中,所述步驟S1包括:
(1)加入第一個數(shù)據(jù)源節(jié)點作為一個Route_peer;
(2)其他的數(shù)據(jù)源節(jié)點通過系統(tǒng)中任何一個已經(jīng)存在的節(jié)點加入系統(tǒng),并且它們都向Route_peer注冊關于自己的地址、LSD-MBR、代表點信息;
(3)當Route_peer發(fā)現(xiàn)維護的包括自己在內(nèi)的節(jié)點數(shù)量超過預先設置的某個門限值時Load_Max,對整個數(shù)據(jù)空間進行分裂,并從分裂出去的數(shù)據(jù)源節(jié)點中選擇一個數(shù)據(jù)源節(jié)點作為Route_peer,并將該數(shù)據(jù)源節(jié)點的地址告知所有分裂出去的數(shù)據(jù)源節(jié)點;使得整個數(shù)據(jù)空間就一分為二,分別包含了若干數(shù)量的數(shù)據(jù)源節(jié)點;
(4)重復步驟(2)、(3),隨著數(shù)據(jù)源節(jié)點的不斷加入,數(shù)據(jù)空間最終被分裂成若干個子空間;
(5)利用層次化的環(huán)形結(jié)構(gòu)Chord#來組織網(wǎng)絡中的空間數(shù)據(jù)源節(jié)點;每當系統(tǒng)發(fā)生分裂產(chǎn)生新的子空間的時候,這個新的子空間的Route_peer就可以根據(jù)與CAN類似的ID分配方式得到一個ID,并據(jù)此按照Chord#的節(jié)點加入?yún)f(xié)議加入到系統(tǒng)中;最終由各個子空間的Route_peer形成一個頂層的環(huán)狀網(wǎng)絡。
上述系統(tǒng)能夠較好地支持P2P空間點查詢,范圍查詢,區(qū)域查詢,KNN查詢等。相關查詢算法現(xiàn)有技術中有詳細介紹,由于篇幅關系就不在這里贅述。根據(jù)以前的工作,當查詢被轉(zhuǎn)發(fā)給目的地分組后,將被分組的Route_peer以廣播的形式轉(zhuǎn)發(fā)給組內(nèi)所有節(jié)點以執(zhí)行本地查詢。這種方式雖然簡單,但可能會造成大量不必要的消息開銷,因此需要在分組內(nèi)做進一步定位,裁剪掉不可能貢獻最終結(jié)果的節(jié)點。本發(fā)明利用iDisdance來實現(xiàn)這一目的。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢方法中,所述步驟S2包括:
建立iDistance索引的基礎是需要將成數(shù)據(jù)劃分成若干個數(shù)據(jù)簇。在這里的數(shù)據(jù)簇分為兩個層面,第一個層面是分組內(nèi)數(shù)據(jù)節(jié)點根據(jù)自身存儲的數(shù)據(jù)所維護的數(shù)據(jù)簇(數(shù)據(jù)簇的生成可以采用任何標準的聚類算法),第二個層面是針對分組內(nèi)所有節(jié)點的數(shù)據(jù)簇生成的數(shù)據(jù)簇,即將分組內(nèi)所有節(jié)點的數(shù)據(jù)簇看做點數(shù)據(jù),并將它們的分布信息發(fā)送給本組的Route_peer,由Route_peer根據(jù)這些信息再次生成聚類并建立iDistance索引,本發(fā)明將其稱為節(jié)點簇。這是一種基于數(shù)據(jù)的簇劃分策略,其優(yōu)勢是能夠更好地反映數(shù)據(jù)的真實分布,從而能夠達到更好的裁剪搜索空間的目的。對于節(jié)點簇的劃分,本發(fā)明采用的是基于空間的劃分策略,即在子空間選取幾個固定的參考點,讓節(jié)點根據(jù)自身維護的數(shù)據(jù)簇距離固定參考點的遠近來將其劃分到不同的節(jié)點簇。如圖1所示,子空間邊界的中心O1,O2,O3,O4被選取為固定參考點,以它們?yōu)橹行牡?個虛線圓為節(jié)點簇,另外4個實線圓為數(shù)據(jù)簇。
當分組內(nèi)所有數(shù)據(jù)簇依據(jù)若干個固定參考點劃分為節(jié)點簇后,將數(shù)據(jù)簇看做集中環(huán)境下的點數(shù)據(jù)并據(jù)此建立iDistance索引。為了敘述方便,本發(fā)明做出如下定義:
如圖2所示,將一個分組內(nèi)的固定參考點個數(shù)為PeerClusterNum(在本文中PeerClusterNum為4),將固定參考點定義為Oi,節(jié)點簇半徑定義為pri,將以Oi為中心,不含有數(shù)據(jù)簇的范圍半徑定義為dist_mini,1≤i≤PeerClusterNum;每個節(jié)點簇中數(shù)據(jù)簇的個數(shù)定義為dataClusterNum,數(shù)據(jù)簇參考點定義為Pj,數(shù)據(jù)簇半徑定義為drj,數(shù)據(jù)簇參考點Pj與所屬節(jié)點簇參考點之間的距離定義為dpj,在某一節(jié)點簇中的數(shù)據(jù)簇iDistance索引值Lj定義為i*c+dist(Pj,Oi)+drj,1≤j≤dataClusterNum,1≤i≤PeerClusterNum;Route_peer維護的B+樹索引葉結(jié)點的每個入口entry由Lj,Pj,drj,dpj以及每個數(shù)據(jù)簇的所屬數(shù)據(jù)源節(jié)點的地址IPj組成。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢方法中,所述步驟S3包括:
如果同時滿足dist(q,Oi)-r≤pri和dist(q,Oi)+r≥dist_mini,即查詢范圍與該節(jié)點簇相交并且沒有被不含數(shù)據(jù)簇的區(qū)域包含,則分析該節(jié)點簇中各數(shù)據(jù)簇的iDistance索引值。如果滿足|dist(q,Oi)-dpj|≤r+drj,則說明該數(shù)據(jù)簇可能需要被搜索;在這一前提下,如果繼續(xù)滿足dist(Pj,q)≤r+drj,則確認該數(shù)據(jù)簇需要被搜索;如果該數(shù)據(jù)簇的擁有數(shù)據(jù)源節(jié)點不在PeerSet中,則將其地址信息加入PeerSet;最后將查詢消息并行轉(zhuǎn)發(fā)給PeerSet中的所有數(shù)據(jù)源節(jié)點。
舉例來說,當某一數(shù)據(jù)源節(jié)點提出如圖3所示的范圍查詢時,查詢首先按照上述描述的范圍查詢算法被定位到分組1100。
假設分組1100的節(jié)點簇分布如圖4所示。那么當該分組Route_peer的收到范圍查詢RangeQuery(r,q)后,依據(jù)dist(Oi,q)-r<=pri這一判定條件過濾掉了節(jié)點簇O2和O3。
以節(jié)點簇O3為例,假設其數(shù)據(jù)簇分布如圖5所示。根據(jù)判定條件|dist(q,Oi)-dpj|≤r+drj,數(shù)據(jù)簇1,2,5都屬于被考慮范圍(與圖中灰色部分相交的數(shù)據(jù)簇)。然后通過判定條件dist(Pj,q)≤r+drj進一步分析,得出數(shù)據(jù)簇3與查詢范圍相交,最后將查詢轉(zhuǎn)發(fā)給數(shù)據(jù)簇3所屬的節(jié)點。
實驗與分析
本發(fā)明所有的仿真實驗都可以基于P2P仿真平臺PlanetSim以及Java SDK 1.6,實驗程序運行環(huán)境為Intel P4 3.0G,內(nèi)存512M。
第一個測試為隨機生成由210個數(shù)據(jù)源節(jié)點組成的覆蓋網(wǎng)絡,并將分組的大小設置為8。每個數(shù)據(jù)源節(jié)點存儲由50個點數(shù)據(jù)組成的數(shù)據(jù)簇(以數(shù)據(jù)空間范圍內(nèi)的隨機點為中心,半徑為0.025)。然后隨機選取數(shù)據(jù)空間范圍內(nèi)的查詢點q,對以q為中心,半徑分別為0.05,0.1,0.15,0.2,0.25的范圍查詢所花費的消息數(shù)進行測試。如圖6所示,利用iDistance進行數(shù)據(jù)源節(jié)點定位的查詢開銷要優(yōu)于組內(nèi)廣播泛洪方式。另外,隨著查詢范圍的增加,前者的優(yōu)勢更為明顯。這是因為查詢范圍的增加導致查詢跨越了更多的分組,因此泛洪方式發(fā)送不必要的查詢消息的可能性越大,通過iDistance方式過濾不必要的查詢消息的可能性也越大(當然,并不一定是查詢范圍越大,過濾效果越好。比如當查詢范圍覆蓋整個數(shù)據(jù)空間時,就不能減少查詢開銷)。
第二個測試為隨機生由210個數(shù)據(jù)源節(jié)點組成的覆蓋網(wǎng)絡,并將分組的大小設置為8。每個節(jié)點存儲由10個點數(shù)據(jù)組成的數(shù)據(jù)簇(以數(shù)據(jù)空間范圍內(nèi)的隨機點為中心,半徑為0.025)。然后隨機選取數(shù)據(jù)空間范圍內(nèi)的查詢點q,對以q為中心的KNN(k分別取值10,50,100,200)查詢所花費的消息數(shù)進行測試。如圖7所示,利用iDistance進行KNN查詢定位的查詢開銷要優(yōu)于組內(nèi)廣播泛洪方式。當k=10的時候,兩者差別不大。這是由于當k的值較小的時候,R init(盡可能小的并且至少包含k個結(jié)果集的半徑)的值也很小,因此涉及到的分組很少。隨著k值的增加,差距逐漸擴大。但當k取值大于50后(即在q所屬的分組范圍內(nèi)不能確定R init時),兩者查詢開銷之間的差距有縮小的趨勢。這是因為此時首先需要在一定數(shù)量的分組內(nèi)進行多播以確定至少包括k個最近鄰居的R init,而兩者在這一過程中的查詢開銷沒有差別。k值越大,則需要試探更多的分組才能確定R init,所花費的消息數(shù)在整個查詢開銷中的比例也隨著增加,因此表現(xiàn)出差距縮小的趨勢。
本發(fā)明還提供一種基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng),其包括如下單元:
查詢系統(tǒng)構(gòu)造單元,用于構(gòu)造基于分組Chord#的P2P空間數(shù)據(jù)查詢系統(tǒng):
針對每個數(shù)據(jù)源節(jié)點對應存儲的空間數(shù)據(jù)維護一個或多個本地空間數(shù)據(jù)邊界矩形LSD-MBR;將所有數(shù)據(jù)源節(jié)點依據(jù)功能劃分為路由節(jié)點和數(shù)據(jù)節(jié)點,分別用Route_peer和Data_peer表示;其中Data_peer是指僅負責根據(jù)本地數(shù)據(jù)計算查詢的數(shù)據(jù)源節(jié)點,Route_peer是指從Data_peer中挑選出來的負責根據(jù)索引信息路由查詢消息的數(shù)據(jù)源節(jié)點;各數(shù)據(jù)源節(jié)點將LSD-MBR的中心作為數(shù)據(jù)源節(jié)點本身的代表點,用于通過代表點來決定節(jié)點在數(shù)據(jù)空間中的位置,從而決定在覆蓋網(wǎng)絡中的位置;
iDistance索引構(gòu)造單元,用于構(gòu)造基于節(jié)點簇的iDistance索引:將空間數(shù)據(jù)劃分成若干個數(shù)據(jù)簇;將分組內(nèi)所有節(jié)點的數(shù)據(jù)簇作為點數(shù)據(jù),并將點數(shù)據(jù)的分布信息發(fā)送給本組的Route_peer,由Route_peer根據(jù)分布信息再次生成聚類并建立iDistance索引,形成節(jié)點簇;在子空間選取幾個固定的參考點,讓路由節(jié)點根據(jù)自身維護的數(shù)據(jù)簇距離固定參考點的遠近來將其劃分到不同的節(jié)點簇;
節(jié)點定位單元,用于基于iDistance索引進行組內(nèi)節(jié)點定位:當一個以q為中心,r為半徑的范圍查詢到達目的地分組后,由該分組的Route_peer首先根據(jù)節(jié)點簇的參考點與半徑判斷是否屬于被搜索的范圍;如果屬于,則通過該節(jié)點簇中各數(shù)據(jù)簇的索引信息判斷哪些數(shù)據(jù)簇需要被搜索,并將查詢轉(zhuǎn)發(fā)給這些數(shù)據(jù)簇的數(shù)據(jù)源節(jié)點。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng)中,所述查詢系統(tǒng)構(gòu)造單元包括:
(1)加入第一個數(shù)據(jù)源節(jié)點作為一個Route_peer;
(2)其他的數(shù)據(jù)源節(jié)點通過系統(tǒng)中任何一個已經(jīng)存在的節(jié)點加入系統(tǒng),并且它們都向Route_peer注冊關于自己的地址、LSD-MBR、代表點信息;
(3)當Route_peer發(fā)現(xiàn)維護的包括自己在內(nèi)的節(jié)點數(shù)量超過預先設置的某個門限值時Load_Max,對整個數(shù)據(jù)空間進行分裂,并從分裂出去的數(shù)據(jù)源節(jié)點中選擇一個數(shù)據(jù)源節(jié)點作為Route_peer,并將該數(shù)據(jù)源節(jié)點的地址告知所有分裂出去的數(shù)據(jù)源節(jié)點;使得整個數(shù)據(jù)空間就一分為二,分別包含了若干數(shù)量的數(shù)據(jù)源節(jié)點;
(4)重復(2)、(3),隨著數(shù)據(jù)源節(jié)點的不斷加入,數(shù)據(jù)空間最終被分裂成若干個子空間;
(5)利用層次化的環(huán)形結(jié)構(gòu)Chord#來組織網(wǎng)絡中的空間數(shù)據(jù)源節(jié)點;每當系統(tǒng)發(fā)生分裂產(chǎn)生新的子空間的時候,這個新的子空間的Route_peer就可以根據(jù)與CAN類似的ID分配方式得到一個ID,并據(jù)此按照Chord#的節(jié)點加入?yún)f(xié)議加入到系統(tǒng)中;最終由各個子空間的Route_peer形成一個頂層的環(huán)狀網(wǎng)絡。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng)中,所述iDistance索引構(gòu)造單元包括:
將一個分組內(nèi)的固定參考點個數(shù)為PeerClusterNum,將固定參考點定義為Oi,節(jié)點簇半徑定義為pri,將以Oi為中心,不含有數(shù)據(jù)簇的范圍半徑定義為dist_mini,1≤i≤PeerClusterNum;每個節(jié)點簇中數(shù)據(jù)簇的個數(shù)定義為dataClusterNum,數(shù)據(jù)簇參考點定義為Pj,數(shù)據(jù)簇半徑定義為drj,數(shù)據(jù)簇參考點Pj與所屬節(jié)點簇參考點之間的距離定義為dpj,在某一節(jié)點簇中的數(shù)據(jù)簇iDistance索引值Lj定義為i*c+dist(Pj,Oi)+drj,1≤j≤dataClusterNum,1≤i≤PeerClusterNum;Route_peer維護的B+樹索引葉結(jié)點的每個入口entry由Lj,Pj,drj,dpj以及每個數(shù)據(jù)簇的所屬數(shù)據(jù)源節(jié)點的地址IPj組成。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng)中,所述節(jié)點定位單元包括:
如果同時滿足dist(q,Oi)-r≤pri和dist(q,Oi)+r≥dist_mini,即查詢范圍與該節(jié)點簇相交并且沒有被不含數(shù)據(jù)簇的區(qū)域包含,則分析該節(jié)點簇中各數(shù)據(jù)簇的iDistance索引值。如果滿足|dist(q,Oi)-dpj|≤r+drj,則說明該數(shù)據(jù)簇可能需要被搜索;在這一前提下,如果繼續(xù)滿足dist(Pj,q)≤r+drj,則確認該數(shù)據(jù)簇需要被搜索;如果該數(shù)據(jù)簇的擁有數(shù)據(jù)源節(jié)點不在PeerSet中,則將其地址信息加入PeerSet;最后將查詢消息并行轉(zhuǎn)發(fā)給PeerSet中的所有數(shù)據(jù)源節(jié)點。
實施本發(fā)明提供的基于iDisdance的P2P空間數(shù)據(jù)查詢方法及系統(tǒng)具有以下有益效果:針對空間范圍查詢和KNN查詢,提出了利用iDisdance在分組內(nèi)進行再次查詢定位的方法。測試表明相比較在組內(nèi)泛洪的方式,該方法能有效地過濾不必要的查詢消息,從而降低空間查詢的開銷。針對KNN查詢,隨著k值的增加,差距逐漸擴大。但當k取值大于50后(即在q所屬的分組范圍內(nèi)不能確定R init時),兩者查詢開銷之間的差距有縮小的趨勢。
附圖說明
圖1是基于空間的簇劃分示意圖;
圖2是節(jié)點簇,數(shù)據(jù)簇示意圖;
圖3是范圍查詢示意圖;
圖4是節(jié)點簇過濾示意圖;
圖5是數(shù)據(jù)簇過濾示意圖;
圖6是采用節(jié)點定位與不采用節(jié)點定位的范圍查詢開銷對比圖;
圖7采用節(jié)點定位與不采用節(jié)點定位的KNN查詢開銷對比圖。
具體實施方式
如圖1所示一種基于iDisdance的P2P空間數(shù)據(jù)查詢方法,其包括如下步驟:
S1、構(gòu)造基于分組Chord#的P2P空間數(shù)據(jù)查詢系統(tǒng):
針對每個數(shù)據(jù)源節(jié)點對應存儲的空間數(shù)據(jù)維護一個或多個本地空間數(shù)據(jù)邊界矩形LSD-MBR;將所有數(shù)據(jù)源節(jié)點依據(jù)功能劃分為路由節(jié)點和數(shù)據(jù)節(jié)點,分別用Route_peer和Data_peer表示;其中Data_peer是指僅負責根據(jù)本地數(shù)據(jù)計算查詢的數(shù)據(jù)源節(jié)點,Route_peer是指從Data_peer中挑選出來的負責根據(jù)索引信息路由查詢消息的數(shù)據(jù)源節(jié)點;各數(shù)據(jù)源節(jié)點將LSD-MBR的中心作為數(shù)據(jù)源節(jié)點本身的代表點,用于通過代表點來決定節(jié)點在數(shù)據(jù)空間中的位置,從而決定在覆蓋網(wǎng)絡中的位置;
S2、構(gòu)造基于節(jié)點簇的iDistance索引:將空間數(shù)據(jù)劃分成若干個數(shù)據(jù)簇;將分組內(nèi)所有節(jié)點的數(shù)據(jù)簇作為點數(shù)據(jù),并將點數(shù)據(jù)的分布信息發(fā)送給本組的Route_peer,由Route_peer根據(jù)分布信息再次生成聚類并建立iDistance索引,形成節(jié)點簇;在子空間選取幾個固定的參考點,讓路由節(jié)點根據(jù)自身維護的數(shù)據(jù)簇距離固定參考點的遠近來將其劃分到不同的節(jié)點簇;
S3、基于iDistance索引進行組內(nèi)節(jié)點定位:當一個以q為中心,r為半徑的范圍查詢到達目的地分組后,由該分組的Route_peer首先根據(jù)節(jié)點簇的參考點與半徑判斷是否屬于被搜索的范圍;如果屬于,則通過該節(jié)點簇中各數(shù)據(jù)簇的索引信息判斷哪些數(shù)據(jù)簇需要被搜索,并將查詢轉(zhuǎn)發(fā)給這些數(shù)據(jù)簇的數(shù)據(jù)源節(jié)點。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢方法中,所述步驟S1包括:
(1)加入第一個數(shù)據(jù)源節(jié)點作為一個Route_peer;
(2)其他的數(shù)據(jù)源節(jié)點通過系統(tǒng)中任何一個已經(jīng)存在的節(jié)點加入系統(tǒng),并且它們都向Route_peer注冊關于自己的地址、LSD-MBR、代表點信息;
(3)當Route_peer發(fā)現(xiàn)維護的包括自己在內(nèi)的節(jié)點數(shù)量超過預先設置的某個門限值時Load_Max,對整個數(shù)據(jù)空間進行分裂,并從分裂出去的數(shù)據(jù)源節(jié)點中選擇一個數(shù)據(jù)源節(jié)點作為Route_peer,并將該數(shù)據(jù)源節(jié)點的地址告知所有分裂出去的數(shù)據(jù)源節(jié)點;使得整個數(shù)據(jù)空間就一分為二,分別包含了若干數(shù)量的數(shù)據(jù)源節(jié)點;
(4)重復步驟(2)、(3),隨著數(shù)據(jù)源節(jié)點的不斷加入,數(shù)據(jù)空間最終被分裂成若干個子空間;
(5)利用層次化的環(huán)形結(jié)構(gòu)Chord#來組織網(wǎng)絡中的空間數(shù)據(jù)源節(jié)點;每當系統(tǒng)發(fā)生分裂產(chǎn)生新的子空間的時候,這個新的子空間的Route_peer就可以根據(jù)與CAN類似的ID分配方式得到一個ID,并據(jù)此按照Chord#的節(jié)點加入?yún)f(xié)議加入到系統(tǒng)中;最終由各個子空間的Route_peer形成一個頂層的環(huán)狀網(wǎng)絡。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢方法中,所述步驟S2包括:
將一個分組內(nèi)的固定參考點個數(shù)為PeerClusterNum,將固定參考點定義為Oi,節(jié)點簇半徑定義為pri,將以Oi為中心,不含有數(shù)據(jù)簇的范圍半徑定義為dist_mini,1≤i≤PeerClusterNum;每個節(jié)點簇中數(shù)據(jù)簇的個數(shù)定義為dataClusterNum,數(shù)據(jù)簇參考點定義為Pj,數(shù)據(jù)簇半徑定義為drj,數(shù)據(jù)簇參考點Pj與所屬節(jié)點簇參考點之間的距離定義為dpj,在某一節(jié)點簇中的數(shù)據(jù)簇iDistance索引值Lj定義為i*c+dist(Pj,Oi)+drj,1≤j≤dataClusterNum,1≤i≤PeerClusterNum;Route_peer維護的B+樹索引葉結(jié)點的每個入口entry由Lj,Pj,drj,dpj以及每個數(shù)據(jù)簇的所屬數(shù)據(jù)源節(jié)點的地址IPj組成。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢方法中,所述步驟S3包括:
如果同時滿足dist(q,Oi)-r≤pri和dist(q,Oi)+r≥dist_mini,即查詢范圍與該節(jié)點簇相交并且沒有被不含數(shù)據(jù)簇的區(qū)域包含,則分析該節(jié)點簇中各數(shù)據(jù)簇的iDistance索引值。如果滿足|dist(q,Oi)-dpj|≤r+drj,則說明該數(shù)據(jù)簇可能需要被搜索;在這一前提下,如果繼續(xù)滿足dist(Pj,q)≤r+drj,則確認該數(shù)據(jù)簇需要被搜索;如果該數(shù)據(jù)簇的擁有數(shù)據(jù)源節(jié)點不在PeerSet中,則將其地址信息加入PeerSet;最后將查詢消息并行轉(zhuǎn)發(fā)給PeerSet中的所有數(shù)據(jù)源節(jié)點。
本發(fā)明還提供一種基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng),其包括如下單元:
查詢系統(tǒng)構(gòu)造單元,用于構(gòu)造基于分組Chord#的P2P空間數(shù)據(jù)查詢系統(tǒng):
針對每個數(shù)據(jù)源節(jié)點對應存儲的空間數(shù)據(jù)維護一個或多個本地空間數(shù)據(jù)邊界矩形LSD-MBR;將所有數(shù)據(jù)源節(jié)點依據(jù)功能劃分為路由節(jié)點和數(shù)據(jù)節(jié)點,分別用Route_peer和Data_peer表示;其中Data_peer是指僅負責根據(jù)本地數(shù)據(jù)計算查詢的數(shù)據(jù)源節(jié)點,Route_peer是指從Data_peer中挑選出來的負責根據(jù)索引信息路由查詢消息的數(shù)據(jù)源節(jié)點;各數(shù)據(jù)源節(jié)點將LSD-MBR的中心作為數(shù)據(jù)源節(jié)點本身的代表點,用于通過代表點來決定節(jié)點在數(shù)據(jù)空間中的位置,從而決定在覆蓋網(wǎng)絡中的位置;
iDistance索引構(gòu)造單元,用于構(gòu)造基于節(jié)點簇的iDistance索引:將空間數(shù)據(jù)劃分成若干個數(shù)據(jù)簇;將分組內(nèi)所有節(jié)點的數(shù)據(jù)簇作為點數(shù)據(jù),并將點數(shù)據(jù)的分布信息發(fā)送給本組的Route_peer,由Route_peer根據(jù)分布信息再次生成聚類并建立iDistance索引,形成節(jié)點簇;在子空間選取幾個固定的參考點,讓路由節(jié)點根據(jù)自身維護的數(shù)據(jù)簇距離固定參考點的遠近來將其劃分到不同的節(jié)點簇;
節(jié)點定位單元,用于基于iDistance索引進行組內(nèi)節(jié)點定位:當一個以q為中心,r為半徑的范圍查詢到達目的地分組后,由該分組的Route_peer首先根據(jù)節(jié)點簇的參考點與半徑判斷是否屬于被搜索的范圍;如果屬于,則通過該節(jié)點簇中各數(shù)據(jù)簇的索引信息判斷哪些數(shù)據(jù)簇需要被搜索,并將查詢轉(zhuǎn)發(fā)給這些數(shù)據(jù)簇的數(shù)據(jù)源節(jié)點。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng)中,所述查詢系統(tǒng)構(gòu)造單元包括:
(1)加入第一個數(shù)據(jù)源節(jié)點作為一個Route_peer;
(2)其他的數(shù)據(jù)源節(jié)點通過系統(tǒng)中任何一個已經(jīng)存在的節(jié)點加入系統(tǒng),并且它們都向Route_peer注冊關于自己的地址、LSD-MBR、代表點信息;
(3)當Route_peer發(fā)現(xiàn)維護的包括自己在內(nèi)的節(jié)點數(shù)量超過預先設置的某個門限值時Load_Max,對整個數(shù)據(jù)空間進行分裂,并從分裂出去的數(shù)據(jù)源節(jié)點中選擇一個數(shù)據(jù)源節(jié)點作為Route_peer,并將該數(shù)據(jù)源節(jié)點的地址告知所有分裂出去的數(shù)據(jù)源節(jié)點;使得整個數(shù)據(jù)空間就一分為二,分別包含了若干數(shù)量的數(shù)據(jù)源節(jié)點;
(4)重復(2)、(3),隨著數(shù)據(jù)源節(jié)點的不斷加入,數(shù)據(jù)空間最終被分裂成若干個子空間;
(5)利用層次化的環(huán)形結(jié)構(gòu)Chord#來組織網(wǎng)絡中的空間數(shù)據(jù)源節(jié)點;每當系統(tǒng)發(fā)生分裂產(chǎn)生新的子空間的時候,這個新的子空間的Route_peer就可以根據(jù)與CAN類似的ID分配方式得到一個ID,并據(jù)此按照Chord#的節(jié)點加入?yún)f(xié)議加入到系統(tǒng)中;最終由各個子空間的Route_peer形成一個頂層的環(huán)狀網(wǎng)絡。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng)中,所述iDistance索引構(gòu)造單元包括:
將一個分組內(nèi)的固定參考點個數(shù)為PeerClusterNum,將固定參考點定義為Oi,節(jié)點簇半徑定義為pri,將以Oi為中心,不含有數(shù)據(jù)簇的范圍半徑定義為dist_mini,1≤i≤PeerClusterNum;每個節(jié)點簇中數(shù)據(jù)簇的個數(shù)定義為dataClusterNum,數(shù)據(jù)簇參考點定義為Pj,數(shù)據(jù)簇半徑定義為drj,數(shù)據(jù)簇參考點Pj與所屬節(jié)點簇參考點之間的距離定義為dpj,在某一節(jié)點簇中的數(shù)據(jù)簇iDistance索引值Lj定義為i*c+dist(Pj,Oi)+drj,1≤j≤dataClusterNum,1≤i≤PeerClusterNum;Route_peer維護的B+樹索引葉結(jié)點的每個入口entry由Lj,Pj,drj,dpj以及每個數(shù)據(jù)簇的所屬數(shù)據(jù)源節(jié)點的地址IPj組成。
在本發(fā)明所述的基于iDisdance的P2P空間數(shù)據(jù)查詢系統(tǒng)中,所述節(jié)點定位單元包括:
如果同時滿足dist(q,Oi)-r≤pri和dist(q,Oi)+r≥dist_mini,即查詢范圍與該節(jié)點簇相交并且沒有被不含數(shù)據(jù)簇的區(qū)域包含,則分析該節(jié)點簇中各數(shù)據(jù)簇的iDistance索引值。如果滿足|dist(q,Oi)-dpj|≤r+drj,則說明該數(shù)據(jù)簇可能需要被搜索;在這一前提下,如果繼續(xù)滿足dist(Pj,q)≤r+drj,則確認該數(shù)據(jù)簇需要被搜索;如果該數(shù)據(jù)簇的擁有數(shù)據(jù)源節(jié)點不在PeerSet中,則將其地址信息加入PeerSet;最后將查詢消息并行轉(zhuǎn)發(fā)給PeerSet中的所有數(shù)據(jù)源節(jié)點。
實施本發(fā)明提供的基于iDisdance的P2P空間數(shù)據(jù)查詢方法及系統(tǒng)具有以下有益效果:針對空間范圍查詢和KNN查詢,提出了利用iDisdance在分組內(nèi)進行再次查詢定位的方法。測試表明相比較在組內(nèi)泛洪的方式,該方法能有效地過濾不必要的查詢消息,從而降低空間查詢的開銷。針對KNN查詢,隨著k值的增加,差距逐漸擴大。但當k取值大于50后(即在q所屬的分組范圍內(nèi)不能確定R init時),兩者查詢開銷之間的差距有縮小的趨勢。
可以理解的是,對于本領域的普通技術人員來說,可以根據(jù)本發(fā)明的技術構(gòu)思做出其它各種相應的改變與變形,而所有這些改變與變形都應屬于本發(fā)明權利要求的保護范圍。