基于HBase分布式環(huán)境下移動(dòng)對(duì)象并行網(wǎng)格索引同步方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明屬于電子信息領(lǐng)域,特別是涉及基于HBase分布式環(huán)境下移動(dòng)對(duì)象并行網(wǎng)格索引同步方法?!?br>背景技術(shù):
】[0002]隨著智能手機(jī),平板,全球定位系統(tǒng)(GPS)和地理信息系統(tǒng)的快速發(fā)展和應(yīng)用,大量基于位置的服務(wù)(LBS)應(yīng)運(yùn)而生,廣泛走進(jìn)人們生活的方方面面[1]。例如,手機(jī)用戶通過“簽到”,分享自己的位置信息,從而獲得周圍的餐飲、娛樂、地圖信息以及折扣信息;百度地圖中常見的“附近的加油站”、“最近的餐館”,微信中的“搖一搖”等。LBS也成為學(xué)術(shù)界研究的熱點(diǎn)之一。[0003]基于位置服務(wù)相關(guān)技術(shù)的研究已經(jīng)持續(xù)了很多年,取得很多的成果,而隨著多樣的定位手段、用戶終端及廣泛的通訊手段的出現(xiàn)、潛在的移動(dòng)數(shù)據(jù)源迅速增長(zhǎng),以基于位置服務(wù)為代表的移動(dòng)應(yīng)用已步入移動(dòng)大數(shù)據(jù)時(shí)代。移動(dòng)大數(shù)據(jù)環(huán)境下,數(shù)據(jù)規(guī)模更大、傳播速度更快、多樣性更加廣泛,傳統(tǒng)LBS技術(shù)面臨多種新的挑戰(zhàn)。1)在應(yīng)用規(guī)模方面,規(guī)模急劇擴(kuò)大,移動(dòng)服務(wù)提供商需要面臨超大規(guī)模應(yīng)用所帶來的挑戰(zhàn)。以手機(jī)為例,市場(chǎng)研究公司1CInsights發(fā)布的《2015年1C市場(chǎng)驅(qū)動(dòng)報(bào)告》稱,到2015年,全球手機(jī)用戶量將首次超過全球人口總數(shù)。屆時(shí),全球人口總數(shù)將超過74億,而手機(jī)用戶總數(shù)將略高于75億。面對(duì)如此大規(guī)模的用戶量,傳統(tǒng)集中式的LBS處理系統(tǒng)的性能遇到挑戰(zhàn)。2)在性能方面,移動(dòng)數(shù)據(jù)源及用戶查詢請(qǐng)求的迅速增長(zhǎng),系統(tǒng)需要具備高速的流數(shù)據(jù)處理能力。一方面,隨著硬件技術(shù)與基礎(chǔ)設(shè)施的進(jìn)步,移動(dòng)時(shí)空流數(shù)據(jù)(坐標(biāo)、移動(dòng)速度等)的產(chǎn)生、傳播的速度更快。[0004]在移動(dòng)大數(shù)據(jù)時(shí)代,針對(duì)移動(dòng)大數(shù)據(jù)的處理,傳統(tǒng)存儲(chǔ)與處理數(shù)據(jù)的技術(shù)手段遇到了瓶頸,海量數(shù)據(jù)與系統(tǒng)的數(shù)據(jù)處理能力之間存在一個(gè)鴻溝?,F(xiàn)有的系統(tǒng)無法有效的處理在擴(kuò)展性、實(shí)時(shí)性、可靠性及性能方面所面臨的挑戰(zhàn)。近幾年隨著云計(jì)算具有靈活的擴(kuò)展性、強(qiáng)大的處理能力、高度的可靠性,云計(jì)算已經(jīng)成為解決海量數(shù)據(jù)問題的有效方法。眾所周知,HBase是云環(huán)境下重要的存儲(chǔ)工具。HBase的特點(diǎn)使其非常適合LBS查詢系統(tǒng):首先,HBase擴(kuò)展性非常好,性能突破了單點(diǎn)性能的瓶頸,并且隨著集群規(guī)模的增加,HBase性能越來越高。其次,HBase讀寫性能良好,并且性能不會(huì)隨著數(shù)據(jù)量的增長(zhǎng)而下降,在海量移動(dòng)的環(huán)境下,有效的保證了LBS查詢系統(tǒng)的低延遲和實(shí)時(shí)性。最后,由于LBS對(duì)移動(dòng)對(duì)象位置的聚集性很敏感,而HBase底層數(shù)據(jù)按RowKey有序存儲(chǔ)和分塊(Reg1n)存儲(chǔ),使得良好設(shè)計(jì)的RowKey在批量讀取時(shí)性能提升很快,減少了讀取眾多數(shù)據(jù)的磁盤I/O操作。所以在LBS關(guān)于范圍的查詢中,能大量減少I/O操作,節(jié)省存取時(shí)間。[0005]在LBS查詢中,由于對(duì)象是二維的移動(dòng)對(duì)象點(diǎn),選用網(wǎng)格索引作為索引結(jié)構(gòu),并將索引建立在HBase上。網(wǎng)格索引是一種常用的空間索引結(jié)構(gòu),網(wǎng)格索引結(jié)構(gòu)如圖1所示,它是在地圖圖層上,將空間區(qū)域進(jìn)行規(guī)則劃分,劃分成相同大小的網(wǎng)格,然后基于網(wǎng)格建立空間索引,把落入網(wǎng)格的空間對(duì)象記錄在該網(wǎng)格的索引項(xiàng)里。網(wǎng)格索引具有快速定位,結(jié)構(gòu)簡(jiǎn)單等優(yōu)點(diǎn)。網(wǎng)格索引非常適合應(yīng)用于移動(dòng)對(duì)象的范圍查詢,如圖1所示,黑色范圍框代表查詢范圍,可以根據(jù)查詢框的左下角和右上角的端點(diǎn)坐標(biāo)通過公式快速計(jì)算出每個(gè)端點(diǎn)所屬的網(wǎng)格id,然后通過映射可以快速算出其覆蓋的單元網(wǎng)格。由此再根據(jù)查詢范圍進(jìn)行移動(dòng)對(duì)象的過濾,得到查詢結(jié)果。[0006]在LBS查詢中,由于查詢和更新進(jìn)程同時(shí)共享移動(dòng)對(duì)象位置信息,必須控制多個(gè)進(jìn)程對(duì)共享資源的訪問。移動(dòng)對(duì)象的位置更新和相關(guān)查詢都是分布式環(huán)境下進(jìn)行,許多進(jìn)程來共同完成移動(dòng)用戶的服務(wù)請(qǐng)求。這些進(jìn)程可能在相同的機(jī)器上,也有可能分布在不同的機(jī)器上。如果這些進(jìn)程共享了一些資源,不進(jìn)行相應(yīng)的控制就可能造成結(jié)果的錯(cuò)誤。例如,在LBS查詢中,多個(gè)查詢和更新進(jìn)程同時(shí)進(jìn)行并且由于和位置更新相比,移動(dòng)對(duì)象進(jìn)行查詢更加耗時(shí),所以在查詢執(zhí)行的過程中,原本屬于查詢范圍的移動(dòng)對(duì)象可能進(jìn)行了位置更新,使其位于查詢范圍之外,這樣查詢結(jié)果就少包含了此對(duì)象,相反,如果原本不屬于查詢范圍內(nèi)的移動(dòng)對(duì)象在此期間移動(dòng)到查詢范圍內(nèi),那么最終結(jié)果就多包含了該對(duì)象。這兩種情況都造成了查詢結(jié)果的錯(cuò)誤。圖2說明了這種情況。[0007]如圖2所示,范圍查詢q還未執(zhí)行完畢時(shí),移動(dòng)對(duì)象p進(jìn)行了更新,圖中pi代表移動(dòng)對(duì)象P更新前的位置,P2代表對(duì)象p要將要更新的位置,黑色的范圍框是范圍查詢q的范圍框。根據(jù)定義4.2,范圍查詢q發(fā)起查詢的時(shí)刻,對(duì)象p位于查詢范圍內(nèi),查詢結(jié)果應(yīng)該包含對(duì)象P。但是由于查詢和更新相比執(zhí)行時(shí)間更長(zhǎng),因此如果范圍查詢?cè)诒闅v到對(duì)象P時(shí),P的位置已經(jīng)更新到了P2,那么此時(shí)查詢結(jié)果沒有包含移動(dòng)對(duì)象p。因此和定義不符合,查詢結(jié)果錯(cuò)誤。[0008]在LBS查詢的網(wǎng)格索引中,有兩個(gè)共享資源需要使用鎖來協(xié)調(diào)控制,分別是是單元格和移動(dòng)對(duì)象。兩者都需要被查詢和更新進(jìn)程訪問,如果不對(duì)其進(jìn)行加鎖,就可能出現(xiàn)查詢結(jié)果錯(cuò)誤,或者更新無效等情況。鎖粒度是影響系統(tǒng)系能的關(guān)鍵因素,鎖的粒度越大,越容易實(shí)現(xiàn),但是系統(tǒng)的性能會(huì)下降很大。鎖的粒度越小,相應(yīng)的復(fù)雜度也會(huì)增大,但是系統(tǒng)性能受到的影響就會(huì)很小。樸素的策略是table-lock,即對(duì)HBase數(shù)據(jù)庫(kù)表進(jìn)行加鎖;我們提出的策略是cell-lock,即對(duì)單元格加鎖??紤]到設(shè)計(jì)的HBase數(shù)據(jù)表,對(duì)網(wǎng)格索引中每個(gè)單元格以及移動(dòng)對(duì)象加鎖,由于在HBase數(shù)據(jù)庫(kù)表中,每個(gè)單元格是表中的行健,相當(dāng)于HBase表中的一行,這種情況下鎖粒度比樸素策略小的多。[0009]在LBS查詢中,基于HBase分布式環(huán)境下移動(dòng)對(duì)象并行網(wǎng)格索引同步非常重要,但是目前沒有具體的方法來解決基于HBase分布式環(huán)境下移動(dòng)對(duì)象并行網(wǎng)格索引的同步問題?!?br/>發(fā)明內(nèi)容】[0010]為了解決上述問題本發(fā)明提出的技術(shù)方案是:[0011]基于HBase分布式環(huán)境下移動(dòng)對(duì)象并行網(wǎng)格索引同步方法,包括以下幾步:[0012](1)針對(duì)每個(gè)網(wǎng)格單元,創(chuàng)建一個(gè)ZooKe印er結(jié)點(diǎn)作為鎖目錄,并且結(jié)點(diǎn)類型為持久節(jié)點(diǎn)(PERSISTENT),這種類型的節(jié)點(diǎn)在創(chuàng)建后,就一直存在,直到有刪除操作來主動(dòng)清除這個(gè)節(jié)點(diǎn)一一不會(huì)因?yàn)閯?chuàng)建該節(jié)點(diǎn)的索引用戶連接失效而消失。這個(gè)節(jié)點(diǎn)用來描述被共享的資源,稱為/lock_node,并有一個(gè)標(biāo)志符;[0013](2)每個(gè)希望獲得鎖的索引用戶進(jìn)程在鎖目錄下創(chuàng)建一個(gè)結(jié)點(diǎn),作為鎖/lock_node的子結(jié)點(diǎn),該結(jié)點(diǎn)類型為有序臨時(shí)節(jié)點(diǎn)(EPHEMERAL_SEQUENTIAL),這類節(jié)點(diǎn)的基本特性和持久節(jié)點(diǎn)是一致的,在ZooKeeper中,每個(gè)父節(jié)點(diǎn)會(huì)為他的第一級(jí)子節(jié)點(diǎn)維護(hù)一份時(shí)間順序,會(huì)記錄每個(gè)子節(jié)點(diǎn)創(chuàng)建的先后順序,每個(gè)節(jié)點(diǎn)有一個(gè)序號(hào)。[0014](3)當(dāng)前索引用戶進(jìn)程調(diào)用ZooKeeper的getChildren(/lock當(dāng)前第1頁1 2