文/俞志宏 栗國保 李少白
地理信息技術(shù)的快速發(fā)展,使其信息化水平越來越高,隨之而來的是數(shù)據(jù)的爆炸式增長,使得海量空間數(shù)據(jù)的存儲與查詢時效性面臨巨大挑戰(zhàn)。由于空間數(shù)據(jù)的特殊性,在存儲和管理方面也存在諸多的限制,而分布式技術(shù)的迅速發(fā)展,無疑為空間數(shù)據(jù)的存儲與管理提供了解決方法。ElasticSearch 作為一個分布式可擴展的實時搜索和分析引擎,在海量數(shù)據(jù)的存儲與搜索方面得到廣泛應(yīng)用。由于ElasticSearch面向文檔的特性,使得它在海量空間數(shù)據(jù)的存儲方面也有很好的表現(xiàn),但如何實現(xiàn)空間數(shù)據(jù)的高效查詢是業(yè)界研究的一個熱點問題。傳統(tǒng)的關(guān)系型數(shù)據(jù)庫大多建立樹的索引實現(xiàn)空間查詢,在面臨大數(shù)據(jù)量的查詢時其性能很難滿足實際需求,而傳統(tǒng)的空間索引很難應(yīng)用于非關(guān)系型數(shù)據(jù)庫中,所以需要對空間數(shù)據(jù)進行轉(zhuǎn)換,將轉(zhuǎn)換后的數(shù)據(jù)作為索引字段以用于查詢。因此,本文依據(jù)ElasticSearch 的存儲特性,結(jié)合四叉樹網(wǎng)格編碼算法,將矢量數(shù)據(jù)進行轉(zhuǎn)換,并構(gòu)建空間索引,以提升空間數(shù)據(jù)的查詢效率。在此基礎(chǔ)上,設(shè)計并實現(xiàn)了基于Spark 的空間數(shù)據(jù)分析的優(yōu)化方案,為海量空間數(shù)據(jù)的存儲與查詢分析提供了一種快速有效的解決方案。
圖1:四叉樹網(wǎng)格編碼原理圖
由于四叉樹編碼算法原理較簡單且容易實現(xiàn),已被廣泛應(yīng)用于地理信息系統(tǒng)的業(yè)務(wù)處理中。該算法的基本思想是將一個已知范圍的空間劃分成四個相等的子空間,并按照此方式遞歸執(zhí)行,直到樹的層次達到指定的深度或滿足某種終止條件時則停止劃分。本文依據(jù)四叉樹編碼算法的思想,實現(xiàn)了利用平面直角坐標系所劃分的四個象限作為編號的四叉樹編碼算法。該算法以全球矩形范圍(-180,90,180,-90)為基準網(wǎng)格(可根據(jù)具體應(yīng)用場景調(diào)整矩形范圍),逐級四分,通過單個要素的最小外接矩形,計算落在各級網(wǎng)格的象限編號,將各級的象限編號按順序組合形成網(wǎng)格編碼,其編碼原理如圖1所示。
從圖1中可以看出該算法基于各級象限進行編碼,計算出來的編碼值能夠表達圖形在每一級的格網(wǎng)位置。四叉樹編碼算法的處理流程可描述為:首先,算法根據(jù)輸入的幾何對象計算該對象的最小外接矩形;其次,根據(jù)最小外接矩形的頂點坐標信息對其進行遞歸編碼;最后,輸出幾何對象的編碼集合。在使用該算法對要素類進行遞歸編碼的過程中,會存在一些線狀要素或面狀要素所跨范圍較大的情況,針對該情況算法會根據(jù)要素投射在當前級別四叉樹格網(wǎng)中的位置,產(chǎn)生相應(yīng)的多個編碼值。當網(wǎng)格劃分到一定的級別后,單個面狀要素和線狀要素生成的編碼個數(shù)也會增加,編碼數(shù)的增多會導(dǎo)致存儲的冗余數(shù)據(jù)增多。因此,所采用的格網(wǎng)編碼的長度應(yīng)根據(jù)實際數(shù)據(jù)的特點進行權(quán)衡,其遵循的原則是確保大部分圖形擁有一個編碼,允許少量的圖形擁有多個編碼。
Elasticsearch 是一個分布式、可擴展、實時的搜索與數(shù)據(jù)分析引擎,能夠為海量數(shù)據(jù)提供分布式存儲、搜索和快速分析的服務(wù)。因其強大的搜索與分析能力,已被成功用于很多海量數(shù)據(jù)的處理中,如新浪過億條的日志數(shù)據(jù)的實時分析。Elasticsearch 除能夠提供傳統(tǒng)數(shù)據(jù)庫很難實現(xiàn)的全文搜索功能外,還具備結(jié)構(gòu)化搜索、數(shù)據(jù)分析及復(fù)雜的語言處理等功能。
鑒于此,本文使用Elasticsearch 存儲空間數(shù)據(jù),以充分利用Elasticsearch 強大的索引搜索功能,達到快速查詢指定數(shù)據(jù)的效果。雖然Elasticsearch 提供的搜索功能,能夠滿足空間數(shù)據(jù)基本屬性的快速查詢,但由于圖形數(shù)據(jù)是一組坐標點的集合,直接對該字段進行索引,并不能滿足圖形數(shù)據(jù)的查詢需求。因此,本文結(jié)合空間數(shù)據(jù)的特點及Elasticsearch 索引機制,提出基于四叉樹的網(wǎng)格編碼算法,根據(jù)圖形數(shù)據(jù)計算其網(wǎng)格編碼值,使用網(wǎng)格編碼值對圖形數(shù)據(jù)進行索引?;谝陨显O(shè)計思想,空間數(shù)據(jù)在Elasticsearch 中的存儲形式如表1所示。表1表示的是一條空間數(shù)據(jù)在Elasticsearch 中的表示形式,在保留了空間數(shù)據(jù)原有屬性字段的基礎(chǔ)上添加了codes 字段,用于存儲圖形數(shù)據(jù)轉(zhuǎn)化成的編碼值集合,并指定該字段為索引字段。
針對海量空間數(shù)據(jù)存儲問題,上文中提出基于四叉樹網(wǎng)格編碼算法,并結(jié)合Elasticsearch 強大的搜索能力,解決了多應(yīng)用場景下空間數(shù)據(jù)的查詢性能問題。但空間數(shù)據(jù)在執(zhí)行空間分析操作時,計算耗時較長,尤其是參與計算的空間數(shù)據(jù)量較大時,空間分析操作需等待的時間更久,已不能滿足實際的生產(chǎn)需要。因此,本節(jié)在基于上文中提出的基于四叉樹網(wǎng)格編碼索引方案的基礎(chǔ)上,探討利用基于內(nèi)存的分布式計算引擎Spark 解決傳統(tǒng)模式下計算能力不足的問題,并以空間分析中的空間裁切操作為例,驗證基于Spark 的分布式空間分析的處理性能。
上文中根據(jù)實際應(yīng)用需求提出基于四叉樹網(wǎng)格編碼的索引方案,用以提升多場景下的空間數(shù)據(jù)查詢效率。同樣的,也可以使用該索引方案提升空間數(shù)據(jù)分布式處理的效率,即從底圖數(shù)據(jù)檢索和外部空間數(shù)據(jù)預(yù)加載兩個方面著手,來減少參與計算的數(shù)據(jù)量,從而提升分布式處理的效率。在底圖數(shù)據(jù)檢索方面,對外部空間數(shù)據(jù)使用四叉樹編碼算法計算其編碼值,并根據(jù)編碼值從Elasticsearch 中檢索出與codes 字段前綴相同的數(shù)據(jù),從而減少Spark分發(fā)數(shù)據(jù)時的數(shù)據(jù)量;在外部空間數(shù)據(jù)預(yù)加載方面,對外部空間數(shù)據(jù)進行編碼,并建立編碼與外部要素的對應(yīng)關(guān)系集合,以便在Spark 開始分布式計算時,能夠根據(jù)讀取的底圖要素的編碼值直接找到與其空間上相關(guān)的外部要素,減少程序遍歷計算的次數(shù),從而提升空間數(shù)據(jù)分布式計算的性能。
表1:空間數(shù)據(jù)存儲結(jié)構(gòu)
表2:兩種方案處理空間裁切任務(wù)耗時情況表
圖2:基于Spark 空間數(shù)據(jù)裁切處理流程圖
本節(jié)以空間裁切的應(yīng)用場景為例,使用基于四叉樹網(wǎng)格編碼的索引方案,設(shè)計出基于Spark 的分布式空間數(shù)據(jù)處理方案。其處理流程為:
(1)程序讀取Kafka 隊列中監(jiān)測圖斑數(shù)據(jù),并調(diào)用網(wǎng)格編碼算法計算出矢量數(shù)據(jù)中的網(wǎng)格編碼值,建立網(wǎng)格編碼值與外部圖斑數(shù)據(jù)的映射關(guān)系,存儲于Map 集合中;
(2)Elasticsearch 根據(jù)監(jiān)測圖斑編碼值集合,檢索出符合要求的底圖數(shù)據(jù),并轉(zhuǎn)換成RDD,Spark 逐條讀取RDD 中的codes 字段的值,而后根據(jù)該編碼值從Map 集合中查找到與其有關(guān)聯(lián)的監(jiān)測圖斑,分別執(zhí)行空間裁切操作;
(3)輸出空間裁切后的相關(guān)數(shù)據(jù)?;赟park 空間數(shù)據(jù)裁切處理流程圖如圖2所示。
本小節(jié)通過實驗來測試本文提出的基于四叉樹網(wǎng)格編碼算法的空間數(shù)據(jù)存儲與分析方案在執(zhí)行效率上是否優(yōu)于傳統(tǒng)的空間數(shù)據(jù)存儲與分析方案。基于Hadoop 2.7.3 搭建一個主節(jié)點,兩個數(shù)據(jù)節(jié)點的Hadoop 集群環(huán)境,并在該集群中部署Spark、Elasticsearch 環(huán)境,其中Spark 版本為2.3.0,Elasticsearch 版本為6.4.0。每個數(shù)據(jù)節(jié)點的配置信息為:1 顆8 核主頻1.70GHz 的CPU、125G 內(nèi)存、操作系統(tǒng)為CentOS7.3。測試數(shù)據(jù)使用了一個市的地類圖斑數(shù)據(jù)集作為底圖數(shù)據(jù),其數(shù)據(jù)量為10 萬條記錄,并按照本文提出的存儲方案,存儲于Elasticsearch 中。
為驗證本文提出的空間數(shù)據(jù)處理方案的計算性能,所以本小節(jié)中設(shè)計了基于網(wǎng)格編碼索引的分布式處理方案與傳統(tǒng)的基于隨機散列的分布式處理方案的對比試驗。為保證試驗結(jié)果的可比性,底圖數(shù)據(jù)固定為一個市的地類圖斑數(shù)據(jù),使用不同數(shù)據(jù)量的監(jiān)測圖斑對兩種方案進行測試。兩種方案處理空間裁切任務(wù)的耗時情況如表2所示,其中基于隨機散列的分布式處理方案記作R-INDEX,基于網(wǎng)格編碼索引的分布式處理方案記作G-INDEX,花費時間單位為毫秒。
從表中耗時情況可分析出當選取的監(jiān)測圖斑逐漸增加時,兩套方案的處理時間都有所增加,但本文提出的G-INDEX 方案,在做空間數(shù)據(jù)裁切操作時所花費的時間明顯低于R-INDEX 方案所花費的時間,這表明本文提出基于四叉樹網(wǎng)格編碼空間索引方案要優(yōu)于傳統(tǒng)的基于隨機散列的處理方案。這是因為基于網(wǎng)格編碼的空間索引方案,在獲取到監(jiān)測圖斑后能夠根據(jù)生成的編碼值,從Elasticsearch 中快速檢索出與監(jiān)測圖斑數(shù)據(jù)相關(guān)的記錄,減少空間裁切操作時所處理的數(shù)據(jù)量,從而提升空間裁切處理效率。
本文在研究了Elasticsearch 基礎(chǔ)上,根據(jù)矢量數(shù)據(jù)的空間特性,提出基于四叉樹網(wǎng)格編碼索引方案;而后依據(jù)Spark 的分布式處理原理,設(shè)計出基于Spark 的空間數(shù)據(jù)處理優(yōu)化方案,并選取空間裁切作為應(yīng)用場景,驗證了該優(yōu)化方案的有效性。