本發(fā)明涉及信息檢索領(lǐng)域,特別涉及一種面向海量軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引構(gòu)建方法。
背景技術(shù):
隨著科學(xué)技術(shù)的發(fā)展,當(dāng)今世界已進(jìn)入大數(shù)據(jù)時(shí)代。數(shù)據(jù)規(guī)模的快速增長(zhǎng),使得大數(shù)據(jù)需要具備全局表達(dá)力,時(shí)空大數(shù)據(jù)因其能夠體現(xiàn)時(shí)間、空間以及對(duì)象之間的關(guān)聯(lián)關(guān)系,成為了重要的大數(shù)據(jù)之一。然而,時(shí)空大數(shù)據(jù)之間相對(duì)復(fù)雜的關(guān)系及其動(dòng)態(tài)演化的特性,也帶來(lái)了檢索查詢(xún)的困難。軌跡點(diǎn)數(shù)據(jù)就屬于時(shí)空大數(shù)據(jù),其具體是指,在時(shí)空環(huán)境下,通過(guò)對(duì)移動(dòng)對(duì)象運(yùn)動(dòng)過(guò)程的采樣所獲得的數(shù)據(jù)信息。近年來(lái),衛(wèi)星、無(wú)線(xiàn)網(wǎng)絡(luò),以及定位設(shè)備高速發(fā)展,大量移動(dòng)物體的軌跡點(diǎn)數(shù)據(jù)呈急速增長(zhǎng)的趨勢(shì),對(duì)于軌跡點(diǎn)數(shù)據(jù)的索引構(gòu)建及優(yōu)化查詢(xún)成為了近年來(lái)的熱門(mén)研究。
hadoop是當(dāng)下流行的一種分布式計(jì)算框架,適用于各類(lèi)大規(guī)模數(shù)據(jù)的計(jì)算處理場(chǎng)景,具有廣泛的應(yīng)用基礎(chǔ),目前已有一些基于該框架及其生態(tài)軟件提出的時(shí)空索引方法,如基于hbase的q樹(shù)時(shí)空索引、基于hbase的網(wǎng)格r樹(shù)混合時(shí)空索引等?,F(xiàn)有的時(shí)空索引構(gòu)建方法,大多將數(shù)據(jù)記錄條作為索引單元,這種方式導(dǎo)致存儲(chǔ)消耗大且索引構(gòu)建效率較低,無(wú)法滿(mǎn)足不同類(lèi)型的時(shí)空大數(shù)據(jù)快速增長(zhǎng)的需求。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種面向海量軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引構(gòu)建方法,該方法能夠克服上述現(xiàn)有技術(shù)的缺陷,在分布式環(huán)境下并行構(gòu)建軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引,效率較高;并且以數(shù)據(jù)文件作為索引單元,使索引結(jié)構(gòu)具有靈活的擴(kuò)展性。
本發(fā)明采用的技術(shù)方案如下:一種面向海量軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引構(gòu)建方法,包括以下步驟:
步驟1)、將軌跡點(diǎn)數(shù)據(jù)存儲(chǔ)在軌跡點(diǎn)數(shù)據(jù)文件中;
步驟2)、以所述步驟1)中的軌跡點(diǎn)數(shù)據(jù)文件為索引單元構(gòu)建索引樹(shù)。
優(yōu)選的,所述步驟1)中的軌跡點(diǎn)數(shù)據(jù)至少包含時(shí)間信息和二維位置信息。
優(yōu)選的,所述步驟2)進(jìn)一步包括:
步驟21)、將所述軌跡點(diǎn)數(shù)據(jù)文件劃分到至少一個(gè)計(jì)算單元中;
步驟22)、所述計(jì)算單元基于空間索引結(jié)構(gòu)構(gòu)建時(shí)空索引。
優(yōu)選的,當(dāng)所述計(jì)算單元為多個(gè)并行計(jì)算單元時(shí),所述步驟21)中對(duì)軌跡點(diǎn)數(shù)據(jù)文件的劃分為有序劃分。
優(yōu)選的,利用空間填充曲線(xiàn)實(shí)現(xiàn)所述步驟21)的有序劃分。
優(yōu)選的,所述空間填充曲線(xiàn)為希爾伯特曲線(xiàn)。
優(yōu)選的,所述步驟21)進(jìn)一步包括:
步驟211)計(jì)算用于表征所述軌跡點(diǎn)數(shù)據(jù)文件的二維空間信息的二維希爾伯特值;
步驟212)根據(jù)所述步驟211)中計(jì)算得出的二維希爾伯特值計(jì)算用于表征所述軌跡點(diǎn)數(shù)據(jù)文件的三維空間信息的三維希爾伯特值;
步驟213)根據(jù)所述步驟212)中計(jì)算得出的三維希爾伯特值對(duì)所述軌跡點(diǎn)數(shù)據(jù)文件進(jìn)行劃分。
優(yōu)選的,所述步驟22)中的空間索引結(jié)構(gòu)是r*樹(shù)結(jié)構(gòu)。
優(yōu)選的,可基于mapreduce或spark編程框架實(shí)現(xiàn)對(duì)所述多級(jí)時(shí)空索引樹(shù)的構(gòu)建。
根據(jù)本發(fā)明的另一個(gè)方面,提供一種基于上述方法構(gòu)建的索引樹(shù)對(duì)軌跡點(diǎn)數(shù)據(jù)進(jìn)行查詢(xún)的方法,包括:
步驟a)、遍歷所述索引樹(shù)的根節(jié)點(diǎn),取得根節(jié)點(diǎn)列表;
步驟b)、查詢(xún)所述步驟a)取得的根節(jié)點(diǎn)列表,取得子節(jié)點(diǎn)列表;
步驟c)、并行遍歷步驟b)中取得的子節(jié)點(diǎn)列表,取得軌跡點(diǎn)數(shù)據(jù)文件列表。
優(yōu)選的,所述查詢(xún)方法可基于mapreduce或spark編程框架實(shí)現(xiàn)。
有益效果:本發(fā)明的面向海量軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引構(gòu)建方法,采用了包含運(yùn)動(dòng)信息的數(shù)據(jù)文件作為索引單元,降低了索引的存儲(chǔ)消耗,且可以根據(jù)需求調(diào)整數(shù)據(jù)文件的存儲(chǔ)方式,使索引結(jié)構(gòu)具有高度的可擴(kuò)展性;同時(shí)使用了希爾伯特曲線(xiàn)對(duì)數(shù)據(jù)文件進(jìn)行劃分,相比其他的多維到一維映射的方式,如將經(jīng)緯度映射為網(wǎng)格編號(hào),希爾伯特曲線(xiàn)因其優(yōu)秀的空間填充特性使得劃分效果更良好,能夠降低數(shù)據(jù)傾斜發(fā)生的概率。
附圖說(shuō)明
圖1為本發(fā)明提供的軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空立方體示意圖
圖2為本發(fā)明提供的面向海量軌跡點(diǎn)數(shù)據(jù)的索引樹(shù)結(jié)構(gòu)示意圖
圖3為采用mapreduce編程框架實(shí)現(xiàn)的基于r*樹(shù)的多級(jí)時(shí)空索引樹(shù)并行構(gòu)建過(guò)程,
圖4為采用mapreduce編程框架實(shí)現(xiàn)的基于圖3構(gòu)建的時(shí)空索引樹(shù)的并行查詢(xún)過(guò)程
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案以及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖,對(duì)根據(jù)本發(fā)明的實(shí)施例中提供的面向海量軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引構(gòu)建方法進(jìn)一步詳細(xì)說(shuō)明。
軌跡點(diǎn)數(shù)據(jù)是對(duì)移動(dòng)對(duì)象的實(shí)時(shí)位置采樣而獲得的一系列數(shù)據(jù)記錄,每條記錄包括了采樣時(shí)間戳,二維位置信息,速度、方向等其他運(yùn)動(dòng)信息以及采樣時(shí)刻等其他相關(guān)信息。軌跡點(diǎn)數(shù)據(jù)是一種結(jié)構(gòu)化數(shù)據(jù),這種數(shù)據(jù)列數(shù)固定并且每列的含義、類(lèi)型及值域也固定;同時(shí),這種由采樣收集到的軌跡點(diǎn)數(shù)據(jù)一經(jīng)產(chǎn)生,一般就不會(huì)再被修改和刪除,并且由在線(xiàn)采集轉(zhuǎn)向離線(xiàn)分析的過(guò)程中,軌跡點(diǎn)數(shù)據(jù)會(huì)定期批量積累。
發(fā)明人經(jīng)研究發(fā)現(xiàn),根據(jù)軌跡點(diǎn)數(shù)據(jù)的上述特征,可以將軌跡點(diǎn)數(shù)據(jù)按行存儲(chǔ)并組織為若干個(gè)的數(shù)據(jù)文件,并以這種存儲(chǔ)有軌跡點(diǎn)數(shù)據(jù)記錄的數(shù)據(jù)文件為單位對(duì)軌跡點(diǎn)數(shù)據(jù)進(jìn)行時(shí)空索引。
在對(duì)軌跡點(diǎn)數(shù)據(jù)進(jìn)行記錄時(shí),每條軌跡點(diǎn)數(shù)據(jù)記錄可以抽象為n維向量,第i條記錄可以描述為:
(ti,xi,yi,oi1,...,oin-3)
其中,ti為采樣時(shí)刻時(shí)間戳,xi、yi為移動(dòng)對(duì)象在ti時(shí)刻的二維位置信息(一般為經(jīng)緯度),oi1,...,oin-3為其余n-3維的信息。
圖1示出了本發(fā)明提供的面向海量軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引構(gòu)建方法的軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空立方體示意圖。如圖1所示,將多條軌跡點(diǎn)數(shù)據(jù)存儲(chǔ)為一個(gè)軌跡點(diǎn)數(shù)據(jù)文件,每個(gè)軌跡點(diǎn)數(shù)據(jù)文件包含的軌跡點(diǎn)數(shù)據(jù)具有時(shí)空三維的取值范圍,表征該立方體范圍的三個(gè)頂點(diǎn)分別為:
(tmin,xmin,ymin)、(tmin,xmax,ymax)、(tmax,xmax,ymax)
根據(jù)需求,軌跡點(diǎn)數(shù)據(jù)的存儲(chǔ)方式可以有多種,例如,按時(shí)間升/降序存儲(chǔ),按空間區(qū)域網(wǎng)格存儲(chǔ),或單一空間區(qū)域網(wǎng)格內(nèi)的軌跡點(diǎn)數(shù)據(jù)按時(shí)間升/降序排列存儲(chǔ)等。下面將以按時(shí)間升序存儲(chǔ)的軌跡點(diǎn)數(shù)據(jù)文件為例,對(duì)構(gòu)建軌跡點(diǎn)數(shù)據(jù)時(shí)空索引的過(guò)程加以說(shuō)明。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,提供了一種面向海量軌跡點(diǎn)數(shù)據(jù)的時(shí)空索引構(gòu)建方法。該方法包括軌跡點(diǎn)數(shù)據(jù)文件的劃分和索引樹(shù)的構(gòu)建兩個(gè)步驟,具體內(nèi)容如下:
s10、將軌跡點(diǎn)數(shù)據(jù)文件劃分到至少一個(gè)計(jì)算單元;
根據(jù)軌跡點(diǎn)數(shù)據(jù)文件數(shù)量的多少,在進(jìn)行索引樹(shù)構(gòu)建時(shí),可將軌跡點(diǎn)數(shù)據(jù)文件劃分到單個(gè)計(jì)算單元執(zhí)行,或分配給多個(gè)計(jì)算單元并行執(zhí)行,以提高處理速度及效率。以劃分為w個(gè)計(jì)算單元為例,通過(guò)將所有的軌跡點(diǎn)數(shù)據(jù)文件分配到w個(gè)計(jì)算單元上,由所述計(jì)算單元對(duì)每一個(gè)軌跡點(diǎn)數(shù)據(jù)文件,遍歷所有軌跡點(diǎn)數(shù)據(jù)記錄,統(tǒng)計(jì)獲得該軌跡點(diǎn)數(shù)據(jù)文件包含記錄的時(shí)間、空間取值范圍:
(tmin,tmax)、(xmax,xmin)、(ymax,ymin)
取該軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空立方體的中心點(diǎn)作為標(biāo)識(shí),則每個(gè)軌跡點(diǎn)數(shù)據(jù)文件的可以表征為一個(gè)三維坐標(biāo):
((tmin+tmax)/2,(xmin+xmax)/2,(ymin+ymax)/2)
根據(jù)本發(fā)明的一個(gè)實(shí)施例,在采用多計(jì)算單元并行執(zhí)行時(shí),為了降低查詢(xún)時(shí)的并行遍歷開(kāi)銷(xiāo),提高索引性能,還可以利用空間填充曲線(xiàn)計(jì)算中心點(diǎn)在三維空間中的相近程度,將相近時(shí)間和相近地理空間的軌跡點(diǎn)數(shù)據(jù)文件劃分在一個(gè)計(jì)算單元內(nèi)。
希爾伯特曲線(xiàn)是一種空間填充曲線(xiàn),可將二維空間內(nèi)的點(diǎn)映射為一維的值,即希爾伯特值,希爾伯特值相近的二維空間內(nèi)的元組,常具有在二維空間中相近的性質(zhì)。以下將采用希爾伯特曲線(xiàn)為例,進(jìn)行詳細(xì)描述,具體步驟如下:
s101、將前述軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空立方體的中心點(diǎn)作為標(biāo)識(shí)該軌跡數(shù)據(jù)文件的向量。設(shè)第i個(gè)軌跡點(diǎn)數(shù)據(jù)文件的標(biāo)識(shí)向量為(t′i,x′i,y′i),首先計(jì)算(x′i,y′i)的二維希爾伯特值
s102、對(duì)于所有軌跡點(diǎn)數(shù)據(jù)文件,按采樣率p進(jìn)行采樣。假設(shè)樣本個(gè)數(shù)為m,預(yù)定的并行計(jì)算單元為w個(gè),表征m個(gè)數(shù)據(jù)文件的希爾伯特值升序排列為
s103、遍歷所有軌跡點(diǎn)數(shù)據(jù)文件,判斷第i個(gè)數(shù)據(jù)文件的希爾伯特值
若
則將第i個(gè)文件劃分至第1個(gè)計(jì)算單元;
若
則將第i個(gè)文件劃分至第j個(gè)計(jì)算單元;
若
則將第i個(gè)文件劃分至第w個(gè)單元。
希爾伯特曲線(xiàn)具有良好的空間填充特性,在對(duì)軌跡點(diǎn)數(shù)據(jù)文件進(jìn)行劃分時(shí),可以降低數(shù)據(jù)傾斜發(fā)生的概率。盡管在上述實(shí)施例中,采用了希爾伯特曲線(xiàn)來(lái)對(duì)軌跡點(diǎn)數(shù)據(jù)文件進(jìn)行劃分,但本領(lǐng)域普通技術(shù)人員應(yīng)理解在其他實(shí)施例中可以采用多種劃分方式來(lái)對(duì)軌跡點(diǎn)數(shù)據(jù)文件進(jìn)行有序劃分,如按時(shí)間順序或采用其它類(lèi)型的空間填充曲線(xiàn)。
s20、基于r*樹(shù)構(gòu)建多級(jí)時(shí)空索引樹(shù);
r*樹(shù)是空間索引結(jié)構(gòu)r樹(shù)的一種變體。r樹(shù)是b樹(shù)在多維空間擴(kuò)展而成的高度平衡樹(shù)。與r樹(shù)相比,r*樹(shù)在結(jié)構(gòu)上沒(méi)有太多變化,區(qū)別主要是在索引樹(shù)的插入方面考慮了重疊,r*樹(shù)對(duì)索引中有先插入的單元進(jìn)行有選擇的重新插入,從而優(yōu)化索引樹(shù)。
在步驟s10完成后,計(jì)算單元將以分配到的軌跡點(diǎn)數(shù)據(jù)文件作為索引單元,基于r*樹(shù)并行構(gòu)建該計(jì)算單元的多級(jí)時(shí)空索引樹(shù)。
圖2為本發(fā)明提供的索引樹(shù)結(jié)構(gòu)示意圖,如圖2所示,索引樹(shù)的構(gòu)建過(guò)程與基本的r*樹(shù)構(gòu)建過(guò)程相同。索引樹(shù)以每個(gè)軌跡點(diǎn)數(shù)據(jù)文件的存儲(chǔ)路徑及其包含軌跡點(diǎn)數(shù)據(jù)的范圍,即前述軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空取值范圍(tmin,tmuax)、(xmax,xmin)、(ymax,ymin),作為索引單元文件。具體步驟如下:
s201、葉子節(jié)點(diǎn)的構(gòu)建:每個(gè)葉子節(jié)點(diǎn)包含了至少一個(gè)索引單元,以及可以框住上述所有索引單元的最小時(shí)空矩形;
此處的最小時(shí)空矩形是指其所包含的所有軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空取值范圍,以下均同。
s202、非葉子節(jié)點(diǎn)的構(gòu)建:每個(gè)非葉子節(jié)點(diǎn)包含了其子節(jié)點(diǎn)的指針數(shù)組以及可以框住其所有子節(jié)點(diǎn)的最小時(shí)空矩形;
s203、索引子樹(shù)根節(jié)點(diǎn)的構(gòu)建:每個(gè)計(jì)算單元上的索引子樹(shù)根節(jié)點(diǎn),包含了其子節(jié)點(diǎn)的指針數(shù)組以及可以框住該根節(jié)點(diǎn)所有子節(jié)點(diǎn)的最小時(shí)空矩形,如果索引子樹(shù)根節(jié)點(diǎn)為葉子節(jié)點(diǎn),則包含了該計(jì)算單元上的所有軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空取值范圍;
s204、索引樹(shù)根節(jié)點(diǎn)的構(gòu)建:每個(gè)索引樹(shù)根節(jié)點(diǎn),包含了所有計(jì)算單元上軌跡點(diǎn)數(shù)據(jù)文件的記錄路徑以及可以框住該根節(jié)點(diǎn)所有子節(jié)點(diǎn)的最小時(shí)空矩形。
s205、總索引樹(shù)文件的構(gòu)建:由于軌跡點(diǎn)數(shù)據(jù)總量的大小或積累時(shí)間的不同,通常需要分批次執(zhí)行索引樹(shù)的構(gòu)建,每次構(gòu)建生成的索引樹(shù)根節(jié)點(diǎn)可按其所包含的時(shí)間范圍進(jìn)行升序存儲(chǔ),即為最高層級(jí)的總索引樹(shù)文件。
相比傳統(tǒng)的將每條數(shù)據(jù)記錄作為索引單元,本發(fā)明提供的以軌跡點(diǎn)數(shù)據(jù)文件為索引單元的方法,大幅度降低了索引樹(shù)的構(gòu)建復(fù)雜度,提高了運(yùn)行速度,節(jié)省了系統(tǒng)開(kāi)銷(xiāo),能夠顯著提升對(duì)軌跡點(diǎn)數(shù)據(jù)管理效率和查詢(xún)效率,并且能夠滿(mǎn)足軌跡點(diǎn)數(shù)據(jù)不斷積累的需求。
其中,軌跡點(diǎn)數(shù)據(jù)文件內(nèi)儲(chǔ)存軌跡點(diǎn)數(shù)據(jù)的條數(shù),即軌跡點(diǎn)數(shù)據(jù)文件的大小,會(huì)影響構(gòu)建索引樹(shù)的深度,軌跡點(diǎn)數(shù)據(jù)文件越大,索引樹(shù)深度越小,運(yùn)行速度越快;相對(duì)的,軌跡點(diǎn)數(shù)據(jù)文件越小,索引樹(shù)深度越大,查詢(xún)精確度越高。
在本發(fā)明的另一個(gè)實(shí)施例中,上述索引樹(shù)的構(gòu)建可以基于mapreduce編程模型實(shí)現(xiàn),以并行計(jì)算單元為例,圖3示出了基于mapreduce編程框架實(shí)現(xiàn)的索引樹(shù)構(gòu)建流程圖,如圖3所示,具體流程如下:
步驟101:將軌跡點(diǎn)數(shù)據(jù)文件均勻分配到并行計(jì)算單元上,每個(gè)并行計(jì)算單元每次以軌跡點(diǎn)數(shù)據(jù)文件的存儲(chǔ)路徑pi作為map端輸入,遍歷軌跡點(diǎn)數(shù)據(jù)文件中的所有記錄,統(tǒng)計(jì)該數(shù)據(jù)點(diǎn)文件中包含的軌跡點(diǎn)數(shù)據(jù)的時(shí)空取值范圍(timin,timax)、(ximax,ximin)、(yimax,yimin);
步驟102:統(tǒng)計(jì)完成后,并行計(jì)算單元將軌跡點(diǎn)數(shù)據(jù)文件的存儲(chǔ)路徑以及步驟101中所述的軌跡點(diǎn)數(shù)據(jù)文件的時(shí)空取值范圍構(gòu)成元組(pi,(timin,timax,ximax,ximin,yimax,yimin))作為map端輸出;
步驟103:并行計(jì)算單元將所有軌跡點(diǎn)數(shù)據(jù)文件的在步驟102中所述的元組作為reduce端的輸入及map端輸出并存儲(chǔ)為軌跡點(diǎn)數(shù)據(jù)文件索引記錄文件,即為索引樹(shù)構(gòu)建時(shí)的索引單元。
步驟201:并行計(jì)算單元遍歷所有軌跡點(diǎn)數(shù)據(jù)文件,以步驟102中所述的元組作為map端的輸入;對(duì)每個(gè)軌跡點(diǎn)數(shù)據(jù)文件i的時(shí)空立方體的中心點(diǎn)((timin+timax)/2,(ximin+xmax)/2,(yimin+yimax)/2)作為該軌跡點(diǎn)數(shù)據(jù)文件的標(biāo)識(shí),設(shè)為(tf,xf,yf);根據(jù)前述中心點(diǎn)計(jì)算該數(shù)據(jù)文件的希爾伯特值hts:設(shè)h(x,y)為原始的希爾伯特函數(shù),round(x)為四舍五入的函數(shù),數(shù)據(jù)文件的希爾伯特值計(jì)算函數(shù)hts定義為:
hts=hts(t,x,y)=
h(round(at),round(bh(round(x),round(y))))
其中a,b為根據(jù)需求計(jì)算所得的調(diào)節(jié)參數(shù),用于優(yōu)化計(jì)算希爾伯特值。在計(jì)算過(guò)程中,同時(shí)生成一個(gè)[0,1]之間的隨機(jī)數(shù)r,若r≤0.1,則(hts,1)作為map端的輸出,否則不產(chǎn)生輸出,從而實(shí)現(xiàn)采樣。將獲得的hts值按升序排列,根據(jù)需求取特定的hts值作為劃分點(diǎn)(與步驟s102同);
步驟202:并行計(jì)算單元遍歷所有軌跡點(diǎn)數(shù)據(jù)文件,將每個(gè)步驟102中所述的元組作為map端的輸入,計(jì)算該軌跡點(diǎn)數(shù)據(jù)文件的希爾伯特值
步驟203:并行計(jì)算單元對(duì)步驟202中的map端輸出即reduce端輸入,根據(jù)劃分的并行計(jì)算單元編號(hào),分別存儲(chǔ)為軌跡點(diǎn)數(shù)據(jù)文件的索引記錄文件,每行記錄為(pi,timin,timax,ximax,ximin,yimax,yimin);
步驟301:每個(gè)并行計(jì)算單元分別構(gòu)建索引子樹(shù)(與步驟s201-s203同);
步驟401:將各索引子樹(shù)追加到存儲(chǔ)索引子樹(shù)根節(jié)點(diǎn)的索引子樹(shù)文件中,索引樹(shù)根節(jié)點(diǎn)記錄為
步驟501:將該批次的索引樹(shù)根節(jié)點(diǎn)記錄追加到存儲(chǔ)已有的索引樹(shù)根節(jié)點(diǎn)的索引樹(shù)文件中,之后將所有索引樹(shù)根節(jié)點(diǎn)按時(shí)間范圍的最大值升序排列(與步驟s205同)。
經(jīng)發(fā)明人研究,以1tb大小的軌跡點(diǎn)數(shù)據(jù)集為例,將這些軌跡點(diǎn)數(shù)據(jù)分別儲(chǔ)存成與hdfs塊的默認(rèn)值相同大小的若干軌跡點(diǎn)數(shù)據(jù)文件中,即128mb。采用本發(fā)明提供的方法針對(duì)上述軌跡點(diǎn)數(shù)據(jù)文件構(gòu)建時(shí)空索引樹(shù),共計(jì)可生成約9000條索引記錄。這不僅使參與時(shí)空索引構(gòu)建的數(shù)據(jù)規(guī)模大幅度減小,同時(shí)也能提高構(gòu)建速度。
在本發(fā)明的另一個(gè)實(shí)施例中,還提供了一種基于上述構(gòu)建的索引樹(shù)對(duì)大量軌跡點(diǎn)數(shù)據(jù)進(jìn)行并行查詢(xún)的方法。例如,需要查詢(xún)的大量軌跡點(diǎn)數(shù)據(jù)的時(shí)空取值范圍是:
{t∈[tmin,tmax]∩x∈[xmin,xmax]∩y∈[ymin,ymax]}
其中t為時(shí)間取值條件,x,y為二維地理空間取值條件。具體的查詢(xún)步驟如下:
s30、遍歷前述所有索引樹(shù)的根節(jié)點(diǎn),將時(shí)間范圍與[tmin,tmax]存在交集的索引樹(shù)根節(jié)點(diǎn)加入帶查詢(xún)的根節(jié)點(diǎn)列表中;
s40、依據(jù)tmain/2二分查找步驟a中取得的根節(jié)點(diǎn)列表,將時(shí)空取值范圍存在交集的索引樹(shù)根節(jié)點(diǎn)的索引子樹(shù)根節(jié)點(diǎn)加入待并行遍歷子節(jié)點(diǎn)列表中;
s50、并行遍歷步驟b中取得的子節(jié)點(diǎn)列表中的索引子樹(shù)根節(jié)點(diǎn)的各子節(jié)點(diǎn),若該節(jié)點(diǎn)為非葉子節(jié)點(diǎn),則遍歷該節(jié)點(diǎn)的所有子節(jié)點(diǎn),將時(shí)空取值范圍存在交集的子節(jié)點(diǎn)加入待并行遍歷子節(jié)點(diǎn)列表中;若該節(jié)點(diǎn)為葉子節(jié)點(diǎn),則遍歷該節(jié)點(diǎn)的所有記錄,將時(shí)空取值范圍與查詢(xún)條件的時(shí)空取值范圍存在交集的數(shù)據(jù)文件路徑加入待查詢(xún)文件列表中;
s60、當(dāng)待遍歷子節(jié)點(diǎn)列表變?yōu)榭蘸?,在待查?xún)文件列表中,即包含所有待查詢(xún)的軌跡點(diǎn)數(shù)據(jù)文件集合中,進(jìn)一步查詢(xún)需求的軌跡點(diǎn)數(shù)據(jù)。
在本發(fā)明的另一個(gè)實(shí)施例中,上述查詢(xún)方法可以基于mapreduce編程模型實(shí)現(xiàn),圖4示出了基于mapreduce編程框架實(shí)現(xiàn)的上述查詢(xún)方法的流程圖,如圖4所示,具體流程如下:
步驟101′:讀取索引樹(shù)文件,第i行記錄為
步驟102′:讀取索引子樹(shù)文件,獲得步驟101中所有待遍歷根節(jié)點(diǎn)隊(duì)列q0中的根節(jié)點(diǎn)的索引子樹(shù)根節(jié)點(diǎn),對(duì)索引子樹(shù)根節(jié)點(diǎn)與查詢(xún)條件進(jìn)行重疊判斷,符合重疊條件的索引子樹(shù)根節(jié)點(diǎn)放入待遍歷節(jié)點(diǎn)隊(duì)列qnode中。
上述重疊判斷是指根據(jù)步驟101獲得的索引子樹(shù)根節(jié)點(diǎn)e的時(shí)空取值范圍
且
且
步驟201′:以qnode中的索引子樹(shù)根節(jié)點(diǎn)作為map輸入,對(duì)每個(gè)索引子樹(shù)根節(jié)點(diǎn)e,如果e為非葉子節(jié)點(diǎn),e的子節(jié)點(diǎn)為
步驟202′:對(duì)于reduce端輸入key值為0的記錄,即非葉子節(jié)點(diǎn)的記錄,設(shè)一條記錄為
步驟301′:步驟201′和202′為并行mapreduce過(guò)程,執(zhí)行完畢后將reduce端的輸出作為map端的輸入,重新進(jìn)入步驟201′,直至步驟202′結(jié)束后reduce端的輸出為空。
步驟401′:返回查詢(xún)臨時(shí)表中的內(nèi)容,獲得最終的軌跡點(diǎn)數(shù)據(jù)文件查詢(xún)結(jié)果。
經(jīng)發(fā)明人研究,本發(fā)明提出的時(shí)空索引構(gòu)建及查詢(xún)方法,在對(duì)索引樹(shù)的節(jié)點(diǎn)進(jìn)行遍歷時(shí)僅包括投影、聚集類(lèi)運(yùn)算,不涉及對(duì)單個(gè)軌跡點(diǎn)數(shù)據(jù)文件中的軌跡點(diǎn)數(shù)據(jù)排序等復(fù)雜運(yùn)算過(guò)程,降低了系統(tǒng)開(kāi)銷(xiāo),提高了構(gòu)建及查詢(xún)速度,同時(shí)采用以軌跡點(diǎn)數(shù)據(jù)文件為單位的方式也具有更高的靈活性及擴(kuò)展性。
在本發(fā)明的另一個(gè)實(shí)施例中,上述索引樹(shù)的構(gòu)建及查詢(xún)還可以基于spark編程框架實(shí)現(xiàn)。spark提供的rdd抽象數(shù)據(jù)結(jié)構(gòu)編程模型主要基于內(nèi)存運(yùn)算實(shí)現(xiàn),除了能夠提供交互式查詢(xún)外,它還可以?xún)?yōu)化迭代工作負(fù)載。
盡管在上述實(shí)施例中,采用了基于r*樹(shù)的結(jié)構(gòu)來(lái)對(duì)海量的軌跡點(diǎn)數(shù)據(jù)文件進(jìn)行索引樹(shù)構(gòu)建,但本領(lǐng)域普通技術(shù)人員應(yīng)理解在其他實(shí)施例中可以采用多種空間索引結(jié)構(gòu)實(shí)現(xiàn)本發(fā)明提供的以軌跡點(diǎn)數(shù)據(jù)文件為索引單元進(jìn)行索引構(gòu)建的方法。
雖然本發(fā)明已經(jīng)通過(guò)優(yōu)選實(shí)施例進(jìn)行了描述,然而本發(fā)明并非局限于這里所描述的實(shí)施例,在不脫離本發(fā)明范圍的情況下還包括所作出的各種改變以及變化。