亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng)及方法

文檔序號(hào):6373678閱讀:182來源:國知局
專利名稱:基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng)及方法
技術(shù)領(lǐng)域
本發(fā)明涉及基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng)及方法,屬于信息技術(shù)處理領(lǐng)域。
背景技術(shù)
隨著信息技術(shù)的飛速發(fā)展,地理信息系統(tǒng)(GIS)、計(jì)算機(jī)輔助設(shè)計(jì)與制造(CAD/CAM)、數(shù)字化城市、定位服務(wù)等領(lǐng)域等處理的空間數(shù)據(jù)急劇增加;鑒于海量空間數(shù)據(jù)及其查詢處理的復(fù)雜性,傳統(tǒng)的集中式數(shù)據(jù)存儲(chǔ)與處理方法已經(jīng)無法滿足這些領(lǐng)域應(yīng)用程序的需求。云計(jì)算技術(shù)是近年來計(jì)算機(jī)領(lǐng)域出現(xiàn)的具有很好可擴(kuò)展性的處理大規(guī)模計(jì)算的新技術(shù);其建立在大量廉價(jià)硬件之上的分布式文件系統(tǒng),能提供高吞吐量的數(shù)據(jù)訪問;其MapReduce并行計(jì)算框架采用“分而治之”的思想,將大量的數(shù)據(jù)操作分散給各個(gè)計(jì)算節(jié)點(diǎn)并行處理,達(dá)到提高整個(gè)云計(jì)算平臺(tái)處理能力的目的。云計(jì)算所具備的高伸縮性、高擴(kuò)展 性、高容錯(cuò)性和強(qiáng)大并行處理能力使其成為海量數(shù)據(jù)高效存儲(chǔ)與處理的理想方案。作為開源的云計(jì)算平臺(tái),Hadoop以其擴(kuò)容能力強(qiáng)、成本低廉、效率高、高可靠性、免費(fèi)及良好的可移植性等優(yōu)點(diǎn),迅速成為當(dāng)前熱門的分布式計(jì)算框架和大規(guī)模數(shù)據(jù)存儲(chǔ)解決方案??臻g數(shù)據(jù)索引是空間數(shù)據(jù)查詢與處理的基礎(chǔ),其性能是影響數(shù)據(jù)服務(wù)質(zhì)量的關(guān)鍵因素,如何高效地索引海量空間數(shù)據(jù),一直是數(shù)據(jù)庫領(lǐng)域的研究熱點(diǎn)。但是,Hadoop的分布式文件系統(tǒng)(HDFS)僅支持對(duì)文件的追加寫操作,對(duì)于更新頻繁的動(dòng)態(tài)數(shù)據(jù),傳統(tǒng)的隨機(jī)讀寫磁盤更新索引的方式不再適用于HDFS,必須針對(duì)HDFS的特點(diǎn)進(jìn)行索引更新策略的設(shè)計(jì)。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是針對(duì)HDFS不支持隨機(jī)寫文件,提供了基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng)及方法。本發(fā)明為實(shí)現(xiàn)上述發(fā)明目的采用如下技術(shù)方案
基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng),包括數(shù)據(jù)更新模塊、索引操作緩存模塊、、索引文件更新模塊、索引文件創(chuàng)建模塊、索引文件讀取模塊;其中所述數(shù)據(jù)更新模塊的輸入端接收空間數(shù)據(jù)更新信息,輸出端與索引操作緩存模塊的輸入端連接;所述索引文件更新模塊的第一輸入端與所述索引讀取文件的輸出端連接,第二輸入端與索引操作緩存模塊的輸出端連接,輸出端與所述索引文件創(chuàng)建模塊的輸入端連接;所述索引文件創(chuàng)建模塊的輸出端輸出新建的索引文件;
所述數(shù)據(jù)更新模塊用于獲取空間數(shù)據(jù)的更新信息,并將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息寫入索引操作緩存模塊;
所述索引操作緩存模塊用于緩存與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息;
所述索引文件讀取模塊用于讀取原索引文件;
所述索引更新模塊用于獲取原索引節(jié)點(diǎn),再與索引操作緩存模塊中的索引更新信息對(duì)t匕,得到待創(chuàng)建新索引文件的內(nèi)部節(jié)點(diǎn)信息、葉節(jié)點(diǎn)信息;
所述索引文件創(chuàng)建模塊用于創(chuàng)建新索引文件。
基于Hadoop的海量空間數(shù)據(jù)索引更新方法,包括如下步驟
步驟A,數(shù)據(jù)更新模塊獲取空間數(shù)據(jù)的更新信息;
步驟B,索引操作緩存模塊將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息緩存于內(nèi)存中,并判斷索引操作緩存容量;
步驟C,重復(fù)步驟A至步驟B,直至索引操作緩存容量已滿,進(jìn)入步驟D ;
步驟D,索引文件創(chuàng)建模塊創(chuàng)建新索引文件,所述新索引文件僅包含頭文件信息;
步驟E,創(chuàng)建新索引節(jié)點(diǎn)的根節(jié)點(diǎn)索引更新模塊將原始索引文件中的根節(jié)點(diǎn)信息寫入步驟D所創(chuàng)建的新索引文件中;
步驟F,創(chuàng)建新索引文件的內(nèi)部節(jié)點(diǎn),具體包含如下步驟 步驟F-I,索引文件讀取模塊逐個(gè)讀取原索引文件內(nèi)部節(jié)點(diǎn)
若索引操作緩存模塊存儲(chǔ)有所述原索引文件內(nèi)部節(jié)點(diǎn)的ID,將與索引操作緩存模塊中存儲(chǔ)的ID相對(duì)應(yīng)的內(nèi)部節(jié)點(diǎn)信息寫入所述新索引文件;
否則,將從原索引文件中讀取的內(nèi)部節(jié)點(diǎn)信息寫入所述新索引文件;
步驟F-2,遍歷索引操作緩存模塊中所有新增加的內(nèi)部節(jié)點(diǎn),依次寫入新增加的內(nèi)部節(jié)點(diǎn)至新索引文件中;
步驟G,創(chuàng)建新索引文件的葉節(jié)點(diǎn),具體包含如下步驟
步驟G-1,索引更新模塊逐個(gè)讀取原索引文件葉節(jié)點(diǎn)
若索引操作緩存模塊存儲(chǔ)有所述元索引文件葉節(jié)點(diǎn)的ID,將與索引操作緩存模塊中存儲(chǔ)的ID相對(duì)應(yīng)的葉節(jié)點(diǎn)信息寫入所述新索引文件;
否則,將從原索引文件中讀取的葉節(jié)點(diǎn)信息寫入所述新索引文件;
步驟G-2,遍歷索引操作緩存模塊中所有新增加的葉節(jié)點(diǎn),依次寫入新增加的葉節(jié)點(diǎn)至新索引文件中;
步驟H,索引更新模塊用新索引文件替換原索引文件,并刪除原索引文件。所述基于Hadoop的海量空間數(shù)據(jù)索引更新方法的步驟B中,索引操作緩存模塊將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息緩存于內(nèi)存的具體實(shí)施如下
步驟B-1,判斷更新的空間數(shù)據(jù)對(duì)應(yīng)的索引節(jié)點(diǎn)更新類型若為葉節(jié)點(diǎn)分裂,則進(jìn)入步驟B-2 :若為葉節(jié)點(diǎn)合并,則進(jìn)入步驟B-3 ;
步驟B-2,更新待分裂葉節(jié)點(diǎn)Z,對(duì)應(yīng)的索引信息,具體包含如下步驟
步驟B-2-1,新增4個(gè)葉節(jié)點(diǎn)的磁盤頁,依次給4個(gè)葉節(jié)點(diǎn)磁盤頁編號(hào),刪除分裂葉節(jié)點(diǎn)L0的磁盤頁;
步驟B-2-2,新建一個(gè)內(nèi)部節(jié)點(diǎn)I0的磁盤頁,并將內(nèi)部節(jié)點(diǎn)I0中4個(gè)子節(jié)點(diǎn)的指針指向步驟B-2-1新增的4個(gè)葉節(jié)點(diǎn);
步驟B-2-3,將分裂葉節(jié)點(diǎn)Z,父節(jié)點(diǎn)中指向分裂葉節(jié)點(diǎn)Z,的指針,指向步驟B-2-2新建的內(nèi)部節(jié)點(diǎn)
步驟B-2-4,將分裂后得到的各節(jié)點(diǎn)的信息寫入索引操作緩存模塊;
步驟B-3,更新待合并葉節(jié)點(diǎn)對(duì)應(yīng)的索引信息,具體包含如下步驟
步驟B-3-1,新建一個(gè)葉節(jié)點(diǎn)磁盤頁,所述磁盤頁包含所述待合并葉節(jié)點(diǎn)的空間點(diǎn);步驟B-3-2,刪除所述待合并葉節(jié)點(diǎn)的磁盤頁,刪除所述待合并葉節(jié)點(diǎn)的父節(jié)點(diǎn)(D的磁盤頁;步驟B-3-3,將指向待合并葉節(jié)點(diǎn)的父節(jié)點(diǎn)(D的指針,指向步驟B-3-1中新建的葉節(jié)占.
步驟B-3-4,將步驟B-3-3中所述的葉節(jié)點(diǎn)信息寫入索引操作緩存模塊。本發(fā)明采 用上述技術(shù)方案,具有以下有益效果解決了 Hadoop分布式文件系統(tǒng)中不支持隨機(jī)寫文件的問題,提供了一種高效的更新索引文件的方法,保證了 Hadoop平臺(tái)中空間索引更新的實(shí)時(shí)性與可靠性。


圖I為基于Hadoop海量空間數(shù)據(jù)索引更新系統(tǒng)的結(jié)構(gòu)圖。圖2為基于Hadoop海量空間數(shù)據(jù)索引更新方法流程圖。圖3為基于Hadoop海量空間數(shù)據(jù)索引的邏輯結(jié)構(gòu)圖。圖4為Hadoop平臺(tái)中的四叉樹索引更新系統(tǒng)與其他應(yīng)用的交互示意圖。圖5為基于Hadoop的海量空間數(shù)據(jù)四叉樹索引文件的物理格式。圖6為基于Hadoop的海量空間數(shù)據(jù)四叉樹索引文件的文件頭格式。圖7為基于Hadoop的海量空間數(shù)據(jù)四叉樹索引文件的內(nèi)部節(jié)點(diǎn)格式。圖8為基于Hadoop的海量空間數(shù)據(jù)四叉樹索引文件的葉節(jié)點(diǎn)格式。圖9為葉節(jié)點(diǎn)分裂引起索引文件變化的示意圖。圖10為葉節(jié)點(diǎn)合并引起索引文件變化的示意圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)發(fā)明的技術(shù)方案進(jìn)行詳細(xì)說明
如圖I所示,本發(fā)明所涉及基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng),包括數(shù)據(jù)更新模塊、索引操作緩存模塊、索引文件更新模塊、索引文件創(chuàng)建模塊、索引文件讀取模塊。數(shù)據(jù)更新模塊的輸入端接收空間數(shù)據(jù)更新信息,輸出端與索引操作緩存模塊的輸入端連接。索引文件更新模塊的第一輸入端與所述索引讀取文件的輸出端連接,第二輸入端與索引操作緩存模塊的輸出端連接,輸出端與所述索引文件創(chuàng)建模塊的輸入端連接。索引文件創(chuàng)建模塊的輸出端輸出新建的索引文件。數(shù)據(jù)更新模塊用于獲取空間數(shù)據(jù)的更新信息,并將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息寫入索引操作緩存模塊。索引操作緩存模塊用于緩存與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息。索引操作緩存由5個(gè)類組成,用來表示3種更新操作。5個(gè)類如下
AddLeaf :增加葉節(jié)點(diǎn)的操作;
DelLeaf :刪除葉節(jié)點(diǎn)的操作;
AddInter :增加內(nèi)部節(jié)點(diǎn)的操作;
DelInter :刪除內(nèi)部節(jié)點(diǎn)的操作;
ModLeaf :更新葉節(jié)點(diǎn)中空間點(diǎn)信息;
每個(gè)類都包含一個(gè)HashMap類成員變量,用于保存索引節(jié)點(diǎn)增刪操作,key為原節(jié)點(diǎn)ID,新建節(jié)點(diǎn)的原節(jié)點(diǎn)ID為0,value為更改后的索引節(jié)點(diǎn)對(duì)象(葉節(jié)點(diǎn)分裂成為內(nèi)部節(jié)點(diǎn)、內(nèi)部節(jié)點(diǎn)合并成為葉節(jié)點(diǎn))。則索引的更新操作可以用這五個(gè)類的一系列操作表示插入空間點(diǎn)引起節(jié)點(diǎn)分裂
DelLeaf. add (原葉節(jié)點(diǎn));AddInter. add (內(nèi)部節(jié)點(diǎn));4 次 AddLeaf add (葉節(jié)點(diǎn)); 刪除空間點(diǎn)引起節(jié)點(diǎn)合并
4 次 DelLeaf. add(葉節(jié)點(diǎn));DelInter, add (原內(nèi)部節(jié)點(diǎn));AddInter. add (原內(nèi)部節(jié)
點(diǎn));
插入或刪除空間點(diǎn)節(jié)點(diǎn)未分裂、合并
ModLeaf. add (更改的葉節(jié)點(diǎn));
所有緩存類的容量相同,只要有一個(gè)緩存容量滿了,則開始更新索引操作; 索弓I文件讀取模塊用于讀取原索引文件。索引更新模塊用于獲取原索引節(jié)點(diǎn),再與索引操作緩存模塊中的索引更新信息對(duì)比,得到待創(chuàng)建新索弓I文件的內(nèi)部節(jié)點(diǎn)信息、葉節(jié)點(diǎn)信息。索引文件創(chuàng)建模塊用于以索引節(jié)點(diǎn)為單位在磁盤上創(chuàng)建物理文件。新索引文件格式同原來的索引文件格式,包括文件頭和節(jié)點(diǎn)信息部分。具體的索引文件格式如圖4和圖5所示。圖4描述的是索引文件整體結(jié)構(gòu)文件頭、內(nèi)部節(jié)點(diǎn)和葉節(jié)點(diǎn)。圖5描述的是文件頭信息包括索弓I版本號(hào)、樹深度、桶大小、內(nèi)部節(jié)點(diǎn)大小和內(nèi)部節(jié)點(diǎn)數(shù)、葉節(jié)點(diǎn)大小和葉節(jié)點(diǎn)數(shù)。新創(chuàng)建的索引文件僅包括索弓I文件名和索引的版本號(hào),其中版本號(hào)要大于原索弓I文件的版本號(hào);
上面介紹了空間數(shù)據(jù)更新所引起的索引更新的情況,下面介紹索引更新的具體流程,如圖2所示,索引更新方法的步驟如下
步驟A,數(shù)據(jù)更新模塊獲取空間數(shù)據(jù)的更新信息。步驟B,索引操作緩存模塊將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息緩存于內(nèi)存中,并判斷索引操作緩存容量;索引操作緩存模塊將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息緩存于內(nèi)存的具體實(shí)施如下
步驟B-1,判斷更新的空間數(shù)據(jù)對(duì)應(yīng)的索引節(jié)點(diǎn)更新類型若為葉節(jié)點(diǎn)分裂,則進(jìn)入步驟B-2 :若為葉節(jié)點(diǎn)合并,則進(jìn)入步驟B-3 ;
步驟B-2,更新待分裂葉節(jié)點(diǎn)Z,對(duì)應(yīng)的索引信息,具體包含如下步驟
步驟B-2-1,新增4個(gè)葉節(jié)點(diǎn)的磁盤頁,依次給4個(gè)葉節(jié)點(diǎn)磁盤頁編號(hào),刪除分裂葉節(jié)點(diǎn)L0的磁盤頁;
步驟B-2-2,新建一個(gè)內(nèi)部節(jié)點(diǎn)I0的磁盤頁,并將內(nèi)部節(jié)點(diǎn)I0中4個(gè)子節(jié)點(diǎn)的指針指向步驟B-2-1新增的4個(gè)葉節(jié)點(diǎn);
步驟B-2-3,將分裂葉節(jié)點(diǎn)Z,父節(jié)點(diǎn)中指向分裂葉節(jié)點(diǎn)Z,的指針,指向步驟B-2-2新建的內(nèi)部節(jié)點(diǎn)
步驟B-2-4,將分裂后得到的各節(jié)點(diǎn)的信息寫入索引操作緩存模塊;
步驟B-3,更新待合并葉節(jié)點(diǎn)對(duì)應(yīng)的索引信息,具體包含如下步驟
步驟B-3-1,新建一個(gè)葉節(jié)點(diǎn)磁盤頁,所述磁盤頁包含所述待合并葉節(jié)點(diǎn)的空間點(diǎn);步驟B-3-2,刪除所述待合并葉節(jié)點(diǎn)的磁盤頁,刪除所述待合并葉節(jié)點(diǎn)的父節(jié)點(diǎn)(D的磁盤頁;
步驟B-3-3,將^父節(jié)點(diǎn)中指向^的指針,指向步驟B-3-1中新建的葉節(jié)點(diǎn);
步驟B-3-4,將步驟B-3-3中所述的葉節(jié)點(diǎn)信息寫入索引操作緩存模塊。
步驟C,重復(fù)步驟A至步驟B,直至索引操作緩存容量已滿,進(jìn)入步驟D。步驟D,索引文件創(chuàng)建模塊創(chuàng)建新索引文件,所述新索引文件僅包含頭文件信息;新索引文件的文件頭信息主要用于記錄更新內(nèi)部節(jié)點(diǎn)信息和葉節(jié)點(diǎn)信息,文件頭信息格式如圖6所示;
步驟E,創(chuàng)建新索引節(jié)點(diǎn)的根節(jié)點(diǎn)索引更新模塊將原始索引文件中的根節(jié)點(diǎn)信息寫入步驟D所創(chuàng)建的新索引文件中;
步驟F,創(chuàng)建新索引文件的內(nèi)部節(jié)點(diǎn)(內(nèi)部節(jié)點(diǎn)信息格式如圖7所示),具體包含如下步

步驟F-1,索引更新模塊逐個(gè)讀取原索引文件內(nèi)部節(jié)點(diǎn)
若索引操作緩存模塊存儲(chǔ)有所述元索引文件內(nèi)部節(jié)點(diǎn)的ID,將與索引操作緩存模塊中 存儲(chǔ)的ID相對(duì)應(yīng)的內(nèi)部節(jié)點(diǎn)信息寫入所述新索引文件;
否則,將從原索引文件中讀取的內(nèi)部節(jié)點(diǎn)信息寫入所述新索引文件;
步驟F-2,遍歷索引操作緩存模塊中所有新增加的內(nèi)部節(jié)點(diǎn),依次寫入新增加的內(nèi)部節(jié)點(diǎn)至新索引文件中;
步驟G,創(chuàng)建新索引文件的葉節(jié)點(diǎn)(葉節(jié)點(diǎn)信息格式如圖8所示),具體包含如下步驟 步驟G-1,索引更新模塊逐個(gè)讀取原索引文件葉節(jié)點(diǎn)
若索引操作緩存模塊存儲(chǔ)有所述元索引文件葉節(jié)點(diǎn)的ID,將與索引操作緩存模塊中存儲(chǔ)的ID相對(duì)應(yīng)的葉節(jié)點(diǎn)信息寫入所述新索引文件;
否則,將從原索引文件中讀取的葉節(jié)點(diǎn)信息寫入所述新索引文件;
步驟G-2,遍歷索引操作緩存模塊中所有新增加的葉節(jié)點(diǎn),依次寫入新增加的葉節(jié)點(diǎn)至新索引文件中;
步驟H,索引更新模塊利用Hadoop系統(tǒng)中的系統(tǒng)應(yīng)用程序接口替換原索引文件,并刪除原索引文件。如圖3所示,本發(fā)明所述索引文件在邏輯上為四叉樹結(jié)構(gòu),包含根節(jié)點(diǎn)、內(nèi)部節(jié)點(diǎn)和葉節(jié)點(diǎn)組成,每個(gè)內(nèi)部節(jié)點(diǎn)包括四個(gè)子節(jié)點(diǎn)分別對(duì)應(yīng)東北(NE)、西北(NW)、西南(SW)、東南(SE)四個(gè)空間象限;在物理上由文件頭、根節(jié)點(diǎn)、內(nèi)部節(jié)點(diǎn)和葉節(jié)點(diǎn)等磁盤頁組成??臻g數(shù)據(jù)指歐氏空間中的點(diǎn)數(shù)據(jù)??臻g數(shù)據(jù)更新情況包含空間數(shù)據(jù)的插入引起索引葉節(jié)點(diǎn)分裂和空間數(shù)據(jù)的刪除引起的葉節(jié)點(diǎn)合并等兩種情況,葉節(jié)點(diǎn)合并是指四個(gè)葉節(jié)點(diǎn)節(jié)點(diǎn)合并成為一個(gè)葉節(jié)點(diǎn)。如圖4所示,索引更新系統(tǒng)與整個(gè)索引系統(tǒng)的其他程序交互過程中,當(dāng)空間點(diǎn)發(fā)生變化引起索引節(jié)點(diǎn)的增刪改操作時(shí),并不直接更新至HDFS文件系統(tǒng)中,而是利用“操作緩存”記錄下相應(yīng)的更新操作,從而延遲對(duì)HDFS寫操作。查詢模塊不直接讀取索引文件而是讀取“查詢緩存”,為了保證查詢準(zhǔn)確性,索引節(jié)點(diǎn)相應(yīng)的更新操作需要同步到“查詢緩存”。當(dāng)“操作緩存”中的節(jié)點(diǎn)數(shù)目達(dá)到一定閾值后,將執(zhí)行“拷貝寫”操作生成更新后的索引文件;“拷貝寫”將對(duì)比原始索引文件和“節(jié)點(diǎn)操作緩存”來完成新索引文件的生成,若原始索引文件與“操作緩存”不一致則將“操作緩存”中的數(shù)據(jù)寫入新的索引文件;具體操作是1)增加節(jié)點(diǎn),貝1J在索引文件內(nèi)部節(jié)點(diǎn)或者葉節(jié)點(diǎn)后追加寫入新節(jié)點(diǎn)信息;2)更新節(jié)點(diǎn),利用“操作緩存”的數(shù)據(jù)替換原始索引;3)刪除節(jié)點(diǎn),寫新索引文件時(shí)跳過該節(jié)點(diǎn)所在磁盤頁,將后面的節(jié)點(diǎn)ID前移。當(dāng)“拷貝寫”操作完成后,將利用HDFS的API用新的索引文件替換舊索引文件,然后刪除舊的索引文件?!翱截悓憽睓C(jī)制實(shí)現(xiàn)了索引更新的透明性,并保證查詢結(jié)果的一致性。當(dāng)用戶開始增刪空間點(diǎn)目標(biāo)時(shí),引起空間索引的變化,系統(tǒng)中將三種索引更新操作更改、增加和刪除保存在更新操作緩存中。其中增加和刪除空間點(diǎn)會(huì)引起葉節(jié)點(diǎn)的分裂和合并,下面結(jié)合

下這兩種情況四叉樹其索引文件在磁盤上的變化。如圖5所示,索引文件固定大小為128B的內(nèi)部節(jié)點(diǎn)存儲(chǔ)在一起,其ID為從I至NI順序編號(hào),NI為內(nèi)部節(jié)點(diǎn)數(shù);后面為若干葉節(jié)點(diǎn),其ID從-I至-M順序編號(hào),M為葉節(jié)點(diǎn)數(shù)目。當(dāng)數(shù)據(jù)的插入引起葉節(jié)點(diǎn)&分裂后,索引的文件更新流程
1)新增4個(gè)葉節(jié)點(diǎn)(-#-2,-M-2,-M-3,-M-4)的磁盤頁,ID從葉節(jié)點(diǎn)數(shù)目M順序編號(hào)
2)刪除4的磁盤頁
3)新建一個(gè)內(nèi)部節(jié)點(diǎn)I0磁盤頁,并將4個(gè)子節(jié)點(diǎn)指針指向(-#-2,-M-2,-M-3,~M~4)
4)更新L0父節(jié)點(diǎn)NP指向Z,的指針,將其指向10。如圖9所示,當(dāng)ID為#葉節(jié)點(diǎn)發(fā)生分裂,產(chǎn)生4個(gè)新的子節(jié)點(diǎn)C-M-b -M-2,-M-3, -M-4),同時(shí)原來的葉節(jié)點(diǎn)(Z,)變?yōu)閮?nèi)部節(jié)點(diǎn),內(nèi)部節(jié)點(diǎn)是集中存儲(chǔ)的,因此要先刪除原來的葉節(jié)點(diǎn),然后新建一個(gè)內(nèi)部節(jié)點(diǎn)/,,并加入四個(gè)指針指向新的4個(gè)葉節(jié)點(diǎn);而內(nèi)部節(jié)點(diǎn)(葉節(jié)點(diǎn)的父節(jié)點(diǎn))指向的葉節(jié)點(diǎn)已經(jīng)變成內(nèi)部節(jié)點(diǎn)忍,需要同步更新??臻g數(shù)據(jù)點(diǎn)的刪除會(huì)導(dǎo)致葉節(jié)點(diǎn)合并,索引文件物理結(jié)構(gòu)同樣要發(fā)生變化。如圖10所示,當(dāng)刪除空間節(jié)點(diǎn)后造成內(nèi)部節(jié)點(diǎn)I0的葉節(jié)點(diǎn)(-M+3,-M+2,-M+1,-M)合并,索引文件更新操作如下。I)新建一個(gè)葉節(jié)點(diǎn)i-M-1)磁盤頁,包含待刪除的4個(gè)葉節(jié)點(diǎn)里的空間目標(biāo)。2)刪除-M+2,-M+1, -M)。3)刪除忍。4)更新節(jié)點(diǎn)I0的父節(jié)點(diǎn)的子節(jié)點(diǎn)指針,使其指向(~M-1)所對(duì)應(yīng)的磁盤頁。如圖10所示,當(dāng)內(nèi)部節(jié)點(diǎn)I0的4個(gè)葉節(jié)點(diǎn)(-M+3,-M+2,-M+1’ -M)合并后,I0變?yōu)槿~節(jié)點(diǎn),由于內(nèi)部節(jié)點(diǎn)和葉節(jié)點(diǎn)是分別存儲(chǔ)在磁盤上,因此,先刪除原來的內(nèi)部節(jié)點(diǎn),然后新建一個(gè)葉節(jié)點(diǎn)-#-7,新的葉節(jié)點(diǎn)里包含了原來4個(gè)子節(jié)點(diǎn)所有的空間點(diǎn)對(duì)象,原來的4個(gè)葉節(jié)點(diǎn)也刪除。同時(shí),I0的父節(jié)點(diǎn)(W、指向子節(jié)點(diǎn)I0的指針改為葉節(jié)點(diǎn)-M-I。寫內(nèi)部節(jié)點(diǎn)的過程見算法1,流程如下依次讀取原索引文件中的每個(gè)內(nèi)部節(jié)點(diǎn),如果被刪除,則跳過繼續(xù)處理下一個(gè)節(jié)點(diǎn);否則,更新子節(jié)點(diǎn)和父節(jié)點(diǎn)的指針信息,并寫入新的內(nèi)部節(jié)點(diǎn)至新索引文件中。讀取完原索引文件內(nèi)部節(jié)點(diǎn)后,遍歷緩存對(duì)象addlnter,增加新的內(nèi)部節(jié)點(diǎn)。這些內(nèi)部節(jié)點(diǎn)是由分裂的葉節(jié)點(diǎn)轉(zhuǎn)變而成。Algorithm copyAndwriteInterNode
1.i — I
2.FOR (;i<=內(nèi)部節(jié)點(diǎn)數(shù);i++)
3.node —讀取原索引文件中ID為i的內(nèi)部節(jié)點(diǎn)
4.IF (delInter含有node) //說明該節(jié)點(diǎn)由于葉節(jié)點(diǎn)合并導(dǎo)致刪除
5.跳至3,繼續(xù)讀取原索引文件中節(jié)點(diǎn)
6.對(duì)node中4個(gè)子節(jié)點(diǎn),依次調(diào)用updateChiIdEntry(chiIdId)//更新各個(gè)子節(jié)點(diǎn)指針信息
7.調(diào)用updateParentEntry(node父節(jié)點(diǎn)ID),更新父節(jié)點(diǎn)ID
8.寫入新的內(nèi)部節(jié)點(diǎn)信息至新的索引文件中
9.End FOR
10.Begin遍歷緩存對(duì)象addlnter中的每個(gè)內(nèi)部節(jié)點(diǎn)node
11.對(duì)node中4個(gè)子節(jié)點(diǎn),依次調(diào)用updateChiIdEntry(childld) //更新各個(gè)子節(jié)點(diǎn)指針信息
12.調(diào)用updateParentEntry (node 父節(jié)點(diǎn) ID),更新父節(jié)點(diǎn) ID 13.順序?qū)懭胄略黾拥膬?nèi)部節(jié)點(diǎn)信息至新的索引文件中
14.End結(jié)束addlnter中節(jié)點(diǎn)遍歷
End copyAndwritelnterNode
如算法2所示,為向索引文件寫入葉節(jié)點(diǎn)信息的流程,首先遍歷原索引文件中的葉節(jié)點(diǎn),如果被刪除則繼續(xù)處理下一個(gè)葉節(jié)點(diǎn),否則更新節(jié)點(diǎn)信息和父節(jié)點(diǎn)ID,寫入新的索引中。接著遍歷緩存addLeaf對(duì)象,里面包含由于分裂或者合并產(chǎn)生的新葉節(jié)
點(diǎn),更新父節(jié)點(diǎn)ID后順序?qū)懭胄碌乃饕募小?Algorithm CopyAndwriteLeafNode
Li — -I
2.FOR (;0-i〈=葉節(jié)點(diǎn)數(shù);i—)
3.node —讀取原索引文件中ID為i的葉節(jié)點(diǎn)
4.IF CdelLeaf含有node) //葉節(jié)點(diǎn)分裂或者合并
5.跳至3,繼續(xù)讀取原索引文件中葉節(jié)點(diǎn)
6.ELSE IF (modLeaf含有node)//更新包含空間對(duì)象信息
7.拷貝新的節(jié)點(diǎn)信息
8.ELSE拷貝原節(jié)點(diǎn)信息
9.END IF
10.調(diào)用updateParentEntry (node 父節(jié)點(diǎn) ID),更新父節(jié)點(diǎn) ID
11.順序?qū)懭胄碌娜~節(jié)點(diǎn)信息至新的索引文件中
12.End FOR
13.Begin遍歷緩存對(duì)象addLeaf中的每個(gè)節(jié)點(diǎn)node
14.調(diào)用updateParentEntry (node 父節(jié)點(diǎn) ID),更新父節(jié)點(diǎn) ID
15.順序?qū)懭胄略黾拥娜~節(jié)點(diǎn)信息至新的索引文件中
16.End結(jié)束addlnter中節(jié)點(diǎn)遍歷
End CopyAndwriteLeafNode
綜上所述,本發(fā)明所涉及的機(jī)遇Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng)及方法,解決了Hadoop分布式文件系統(tǒng)中不支持隨機(jī)寫文件的問題,提供了一種高效的更新索引文件的方法,保證了 Hadoop平臺(tái)中空間索引更新的實(shí)時(shí)性與可靠性。本發(fā)明實(shí)施例中所涉及的編程僅為本發(fā)明的一個(gè)實(shí)施例,凡是符合本發(fā)明發(fā)明宗旨的具體實(shí)施例均在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng),其特征在于包括數(shù)據(jù)更新模塊、索引操作緩存模塊、、索引文件更新模塊、索引文件創(chuàng)建模塊、索引文件讀取模塊;其中所述數(shù)據(jù)更新模塊的輸入端接收空間數(shù)據(jù)更新信息,輸出端與索引操作緩存模塊的輸入端連接;所述索引文件更新模塊的第一輸入端與所述索引讀取文件的輸出端連接,第二輸入端與索引操作緩存模塊的輸出端連接,輸出端與所述索引文件創(chuàng)建模塊的輸入端連接;所述索引文件創(chuàng)建模塊的輸出端輸出新建的索引文件; 所述數(shù)據(jù)更新模塊用于獲取空間數(shù)據(jù)的更新信息,并將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息寫入索引操作緩存模塊; 所述索引操作緩存模塊用于緩存與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息; 所述索引文件讀取模塊用于讀取原索引文件; 所述索引更新模塊用于獲取原索引節(jié)點(diǎn),再與索引操作緩存模塊中的索引更新信息對(duì)t匕,得到待創(chuàng)建新索引文件的內(nèi)部節(jié)點(diǎn)信息、葉節(jié)點(diǎn)信息; 所述索引文件創(chuàng)建模塊用于創(chuàng)建新索引文件。
2.基于Hadoop的海量空間數(shù)據(jù)索引更新方法,其特征在于包括如下步驟 步驟A,數(shù)據(jù)更新模塊獲取空間數(shù)據(jù)的更新信息; 步驟B,索引操作緩存模塊將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息緩存于內(nèi)存中,并判斷索引操作緩存容量; 步驟C,重復(fù)步驟A至步驟B,直至索引操作緩存容量已滿,進(jìn)入步驟D ; 步驟D,索引文件創(chuàng)建模塊創(chuàng)建新索引文件,所述新索引文件僅包含頭文件信息; 步驟E,創(chuàng)建新索引節(jié)點(diǎn)的根節(jié)點(diǎn)索引更新模塊將原始索引文件中的根節(jié)點(diǎn)信息寫入步驟D所創(chuàng)建的新索引文件中; 步驟F,創(chuàng)建新索引文件的內(nèi)部節(jié)點(diǎn),具體包含如下步驟 步驟F-I,索引文件讀取模塊逐個(gè)讀取原索引文件內(nèi)部節(jié)點(diǎn) 若索引操作緩存模塊存儲(chǔ)有所述原索引文件內(nèi)部節(jié)點(diǎn)的ID,將與索引操作緩存模塊中存儲(chǔ)的ID相對(duì)應(yīng)的內(nèi)部節(jié)點(diǎn)信息寫入所述新索引文件; 否則,將從原索引文件中讀取的內(nèi)部節(jié)點(diǎn)信息寫入所述新索引文件; 步驟F-2,遍歷索引操作緩存模塊中所有新增加的內(nèi)部節(jié)點(diǎn),依次寫入新增加的內(nèi)部節(jié)點(diǎn)至新索引文件中; 步驟G,創(chuàng)建新索引文件的葉節(jié)點(diǎn),具體包含如下步驟 步驟G-1,索引更新模塊逐個(gè)讀取原索引文件葉節(jié)點(diǎn) 若索引操作緩存模塊存儲(chǔ)有所述元索引文件葉節(jié)點(diǎn)的ID,將與索引操作緩存模塊中存儲(chǔ)的ID相對(duì)應(yīng)的葉節(jié)點(diǎn)信息寫入所述新索引文件; 否則,將從原索引文件中讀取的葉節(jié)點(diǎn)信息寫入所述新索引文件; 步驟G-2,遍歷索引操作緩存模塊中所有新增加的葉節(jié)點(diǎn),依次寫入新增加的葉節(jié)點(diǎn)至新索引文件中; 步驟H,索引更新模塊用新索引文件替換原索引文件,并刪除原索引文件。
3.如權(quán)利要求2所述基于Hadoop的海量空間數(shù)據(jù)索引更新方法,其特征在于所述步驟B中,索引操作緩存模塊將與空間數(shù)據(jù)更新信息相應(yīng)的索引更新信息緩存于內(nèi)存的具體實(shí)施如下步驟B-1,判斷更新的空間數(shù)據(jù)對(duì)應(yīng)的索引節(jié)點(diǎn)更新類型若為葉節(jié)點(diǎn)分裂,則進(jìn)入步驟B-2 :若為葉節(jié)點(diǎn)合并,則進(jìn)入步驟B-3 ; 步驟B-2,更新待分裂葉節(jié)點(diǎn)Z,對(duì)應(yīng)的索引信息,具體包含如下步驟 步驟B-2-1,新增4個(gè)葉節(jié)點(diǎn)的磁盤頁,依次給4個(gè)葉節(jié)點(diǎn)磁盤頁編號(hào),刪除分裂葉節(jié)點(diǎn)L0的磁盤頁; 步驟B-2-2,新建一個(gè)內(nèi)部節(jié)點(diǎn)I0的磁盤頁,并將內(nèi)部節(jié)點(diǎn)I0中4個(gè)子節(jié)點(diǎn)的指針指向步驟B-2-1新增的4個(gè)葉節(jié)點(diǎn); 步驟B-2-3,將分裂葉節(jié)點(diǎn)Z,父節(jié)點(diǎn)中指向分裂葉節(jié)點(diǎn)Z,的指針,指向步驟B-2-2新建的內(nèi)部節(jié)點(diǎn) 步驟B-2-4,將分裂后得到的各節(jié)點(diǎn)的信息寫入索引操作緩存模塊; 步驟B-3,更新待合并葉節(jié)點(diǎn)對(duì)應(yīng)的索引信息,具體包含如下步驟 步驟B-3-1,新建一個(gè)葉節(jié)點(diǎn)磁盤頁,所述磁盤頁包含所述待合并葉節(jié)點(diǎn)的空間點(diǎn);步驟B-3-2,刪除所述待合并葉節(jié)點(diǎn)的磁盤頁,刪除所述待合并葉節(jié)點(diǎn)的父節(jié)點(diǎn)(D的磁盤頁; 步驟B-3-3,將指向待合并葉節(jié)點(diǎn)的父節(jié)點(diǎn)(D的指針,指向步驟B-3-1中新建的葉節(jié)占. 步驟B-3-4,將步驟B-3-3中所述的葉節(jié)點(diǎn)信息寫入索引操作緩存模塊。
全文摘要
本發(fā)明公開了基于Hadoop的海量空間數(shù)據(jù)索引更新系統(tǒng)及方法,屬于信息技術(shù)處理領(lǐng)域。所述系統(tǒng)包括數(shù)據(jù)更新模塊、索引操作緩存模塊、索引文件更新模塊、索引文件創(chuàng)建模塊、索引文件讀取模塊。所述方法中數(shù)據(jù)更新模塊用于獲取空間數(shù)據(jù)的更新情況,并將相應(yīng)的索引更新信息寫入索引操作緩存模塊;索引文件創(chuàng)建模塊用于按照索引節(jié)點(diǎn)為單位在磁盤上創(chuàng)建物理文件;索引更新模塊再利用索引讀取模塊讀取的節(jié)點(diǎn)信息對(duì)比索引緩存的節(jié)點(diǎn)信息,將滿足條件的索引節(jié)點(diǎn)信息寫入新索引文件。本發(fā)明解決了由于Hadoop平臺(tái)僅支持對(duì)文件的追加寫操作而造成對(duì)更新頻繁的動(dòng)態(tài)空間數(shù)據(jù)支持不足的問題,實(shí)時(shí)可靠地更新Hadoop平臺(tái)中空間索引信息。
文檔編號(hào)G06F17/30GK102799679SQ201210255699
公開日2012年11月28日 申請(qǐng)日期2012年7月24日 優(yōu)先權(quán)日2012年7月24日
發(fā)明者馮鈞, 韋冕, 唐志賢, 徐黎明, 顧忠國, 朱忠華 申請(qǐng)人:河海大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1