徐旭東 郭 瑞 文瑞潔
(北京工業(yè)大學計算機學院 北京 100124)
分布式下MongoDB對激光點云的存儲和處理研究
徐旭東 郭 瑞 文瑞潔
(北京工業(yè)大學計算機學院 北京 100124)
近年來,激光點云數(shù)據(jù)的應用急劇增加,如何對其進行高效存儲和快速處理成為當前的一個重要研究方向。點云數(shù)據(jù)包含著豐富的地理信息,屬于空間數(shù)據(jù)范疇。傳統(tǒng)的關系型數(shù)據(jù)庫對海量空間數(shù)據(jù)的存儲和處理相對薄弱,分布式環(huán)境下非關系型數(shù)據(jù)庫的應用為此提供了一個新的研究視角。Sharding技術是數(shù)據(jù)庫水平擴展的一種解決方案,在分布式環(huán)境下搭建MongoDB的Sharding集群,通過范圍分片和哈希分片對大量激光點云數(shù)據(jù)進行分布式存儲、空間查詢和MapReduce運算測試,充分體現(xiàn)了分布式下MongoDB在空間數(shù)據(jù)的存儲和處理方面的巨大優(yōu)勢。
分布式 MongoDB 激光點云 Sharding集群 范圍分片 哈希分片
隨著信息技術的發(fā)展,數(shù)字城市的建設已成為一個勢不可擋的趨勢,GIS(Geographic Information System)在各行業(yè)的應用越來越廣泛。近幾年,激光點云數(shù)據(jù)飛速增長,通過機載、車載及地面激光掃描系統(tǒng)所獲取的點云數(shù)據(jù)已達到了TB,甚至PB級[1],如何對其進行高效安全存儲和快速簡單處理已成為當前的一個重要研究方向。
激光點云數(shù)據(jù)包含著豐富的地理信息,如三維坐標、顏色、反射強度等,屬于空間數(shù)據(jù)范疇。傳統(tǒng)關系型數(shù)據(jù)庫的優(yōu)勢表現(xiàn)在解決數(shù)據(jù)的完整性和一致性問題上,但其對空間數(shù)據(jù)的存儲和處理相對薄弱[2]。而非關系型數(shù)據(jù)庫能夠在分布式環(huán)境下處理大量半結構化和非結構化數(shù)據(jù),并在空間數(shù)據(jù)的存儲和處理方面表現(xiàn)出巨大優(yōu)勢[3]。
MongoDB作為一種典型的非關系型數(shù)據(jù)庫,是一個高性能、開源、模式自由的文檔型數(shù)據(jù)庫,它支持的數(shù)據(jù)結構是Bson,一種類似Json的二進制存儲格式[4]。MongoDB的查詢語言十分強大,幾乎可以實現(xiàn)類似關系型數(shù)據(jù)庫單表查詢的所有功能,還對數(shù)據(jù)提供了完整的索引支持,對空間索引的原生支持使其在處理地理位置信息方面具有顯著優(yōu)勢[5]。另外,MongoDB還提供了數(shù)據(jù)冗余、故障轉移、自動分片等功能。所以,本文通過范圍分片和哈希分片的Sharding集群對大量激光點云數(shù)據(jù)進行分布式存儲、空間查詢和MapReduce運算測試,充分體現(xiàn)了分布式環(huán)境下MongoDB在空間數(shù)據(jù)的存儲和處理方面的巨大優(yōu)勢。
Sharding可以將數(shù)據(jù)水平切分到不同的物理節(jié)點,突破單節(jié)點服務器的I/O能力限制,是數(shù)據(jù)庫水平擴展的解決方案[6]。MongoDB擁有強大的自動分片功能,可以動態(tài)增加刪除節(jié)點、平衡負載,并且提供故障轉移功能[7]。MongoDB的Sharding集群主要包括三部分:Shard節(jié)點、config節(jié)點和mongos節(jié)點,每種類型的節(jié)點都可以由一個或多個計算機組成。
Shard節(jié)點用來存儲實際數(shù)據(jù),可以是單個的mongod實例,也可以是一個Replica Set(副本集配置)[8]。config節(jié)點中存放元數(shù)據(jù),包括集群配置信息以及數(shù)據(jù)的位置。mongos節(jié)點的主要作用是數(shù)據(jù)路由,本身不保存任何數(shù)據(jù)和元數(shù)據(jù),可以使用客戶端和驅動進行訪問。為了確保Sharding集群具有數(shù)據(jù)備份、自動故障轉移和恢復能力,本文中的每個Shard節(jié)點都是一個Replica Set。Replica Set+Sharding的環(huán)境架構如圖1所示。
圖1 Replica Set+Sharding的環(huán)境架構
由于實驗條件限制,本文借助虛擬機(Vmware Workstation 11 )搭建Sharding集群,三臺服務器(Server A、Server B、Server C)統(tǒng)一配置,內存為1 GB,硬盤為20 GB,操作系統(tǒng)為Ubuntu14.04,數(shù)據(jù)庫為mongodb-linux-x86_64-2.4.6。使用Shell命令和JavaScript腳本語言分別進行范圍分片和哈希分片對大量激光點云數(shù)據(jù)的存儲和處理性能測試。
2.1 激光點云數(shù)據(jù)的分布式存儲
Sharding集群是在集合(Collection)層面進行分布存儲數(shù)據(jù)的,為將一個集合的數(shù)據(jù)進行分片,首先需要選擇一個合適的片鍵(Shard Key)[9],然后使用范圍分片或哈希分片將數(shù)據(jù)切分成多個數(shù)據(jù)塊(Chunk)并分布在Shard節(jié)點上,MongoDB2.4以上的版本支持基于哈希的分片。激光點云數(shù)據(jù)的格式如下:
{
″_id″ : ObjectId(″56a9dc5676d3f3b90a1cf6f4″),
″X″ : 292730.639,
″Y″ : 180802.526,
″Z″ : 19.655,
″R″ : 36,
″G″ : 74,
″B″ : 145,
″Loc″ : [
178.78388,
55.05072
]
}
_id是MongoDB自動生成的,每個集合都有唯一的_id值,來確保集合里面每個文檔都能被唯一標識。X、Y、Z和R、G、B分別是點云數(shù)據(jù)的三維坐標和顏色信息,Loc是由精度和緯度組成的數(shù)組對象,表示點云數(shù)據(jù)的地理位置信息。本文分別對1、5、10、50、100 萬條激光點云數(shù)據(jù)進行分布式存儲,選擇_id字段作為片鍵,設置數(shù)據(jù)塊大小為1 MB,范圍和哈希分片的數(shù)據(jù)分布情況如圖2所示。
圖2 范圍和哈希的數(shù)據(jù)分布情況
由圖2可知,范圍分片導致數(shù)據(jù)分布不均,在數(shù)據(jù)量較小的情況下,會出現(xiàn)某個節(jié)點不存儲數(shù)據(jù)的情況。哈希分片可以保證數(shù)據(jù)在各個節(jié)點分布基本均勻,雖然每個節(jié)點的數(shù)據(jù)量不是完全相同,但其差距始終控制在一定范圍內。哈希分片也是基于范圍的,只是將指定的片鍵散列成一個長整型作為最終的片鍵。
2.2 激光點云數(shù)據(jù)的空間查詢
近幾年移動終端迅速普及,基于地理位置的服務LBS(Location Based Service)應用越來越廣泛,比如查找附近的人或物(餐廳、酒店、電影院、KTV等),如何處理LBS應用中的地理位置信息成為關鍵的技術問題[10]。MongoDB原生地支持空間索引,可直接用于位置距離的計算和查詢,在地理位置信息處理方面具有明顯優(yōu)勢。
MongoDB的地理空間索引包括2d和2dsphere索引,分別用于查詢平面和球面上的點[11]。本文使用2d索引,分別對1、5、10、50、100 萬條激光點云數(shù)據(jù)進行空間查詢,通過geoNear函數(shù)查詢距離集合中第一個點最近的10個點。范圍和哈希分片的geoNear查詢時間對比情況如圖3所示。
圖3 范圍和哈希的geoNear查詢時間對比
由圖3可知,Sharding集群可以在幾秒內對百萬條激光點云數(shù)據(jù)進行空間查詢,說明MongoDB在地理位置信息處理方面具有明顯優(yōu)勢。MongoDB通過Geohash算法將經緯度信息轉換成可排序、可比較的字符串編碼[12],使用常見的B+ Tree索引結構來提高空間查詢效率。空間查詢效率與激光點云數(shù)據(jù)在各個節(jié)點的分布情況密切相關。哈希分片中數(shù)據(jù)分布比較均勻,隨著數(shù)據(jù)量的增長,其查詢時間呈穩(wěn)定增長趨勢,范圍分片中數(shù)據(jù)分布不均,導致10 萬條數(shù)據(jù)查詢時間比5 萬條多的情況發(fā)生。在數(shù)據(jù)量較大的情況下,范圍分片的查詢效率比哈希分片高。
2.3 激光點云數(shù)據(jù)的MapReduce運算
MapReduce是一種便于分布式處理的計算模型,將輸入的大量數(shù)據(jù)分解后,通過多臺服務器進行并行運算,從而提高數(shù)據(jù)處理的效率[13]。MongoDB提供的MapReduce框架是一種強大的數(shù)據(jù)聚合工具,相當于關系型數(shù)據(jù)庫中的Group By,需要實現(xiàn)Map和Reduce函數(shù)。本文分別對1、5、10、50、100 萬條激光點云數(shù)據(jù)進行MapReduce運算,統(tǒng)計R屬性在區(qū)間[0, 255]中的單一整數(shù)對應的數(shù)據(jù)量。JavaScript腳本語言如下:
db.runCommand(
{mapreduce: ″p10000″,
map: function () { emit(this.R, 1); },
reduce: function (key, values) { return Array.sum(values); },
out: ″mrp10000″ ,
sort:{R:1}
}
)
參數(shù)mapreduce和out的值分別代表要操作的目標集合和統(tǒng)計結果存放的集合。map函數(shù)調用emit(key, value)來遍歷集合中的所有記錄,將輸出的key與value傳遞給reduce函數(shù)進行處理。參數(shù)sort表示對目標記錄進行排序,是否進行排序對運算效率有一定的影響。哈希分片中對激光點云數(shù)據(jù)的MapReduce運算時間對比如圖4所示。
圖4 是否排序的MapReduce運算時間對比
由圖4可知,Sharding集群在十幾秒內實現(xiàn)了對百萬條激光點云數(shù)據(jù)的MapReduce運算,說明分布式環(huán)境下MongoDB可以對大量激光點云數(shù)據(jù)進行高效處理。對點云數(shù)據(jù)進行排序可以在一定程度上提高MapReduce的運算效率,優(yōu)化數(shù)據(jù)分析的性能。如果處理未排序的輸入數(shù)據(jù),MR引擎幾乎沒有機會在RAM中進行reduce運算,它只能通過一個臨時的集合將數(shù)據(jù)寫回磁盤,然后順序讀取并進行reduce運算。
激光點云數(shù)據(jù)包含著豐富的地理信息,屬于空間數(shù)據(jù)范疇。分布式環(huán)境下非關系型數(shù)據(jù)庫的應用為海量空間數(shù)據(jù)的高效存儲和快速處理提供了解決方案。本文通過范圍分片和哈希分片的Sharding集群對大量激光點云數(shù)據(jù)進行分布式存儲、空間查詢和MapReduce運算測試,充分體現(xiàn)了分布式環(huán)境下MongoDB在空間數(shù)據(jù)的存儲和處理方面的巨大優(yōu)勢。下一步工作將通過機器學習算法,結合MongoDB的高效存儲優(yōu)勢和Hadoop強大的并行計算能力來挖掘海量激光點云數(shù)據(jù)的實用價值和社會價值。
[1] 張蕊,李廣云,王力,等.基于HDFS的海量激光點云數(shù)據(jù)分塊存儲方法研究[J].測繪通報,2014(3):21-24.
[2] 陳錦偉.基于MySQL的空間數(shù)據(jù)庫關鍵技術研究[D].江蘇:南京郵電大學,2013.
[3] 盧冬海,何先波.淺析NoSQL數(shù)據(jù)庫[J].中國西部科技,2011,10(2):14-16.
[4] 王光磊.MongoDB數(shù)據(jù)庫的應用研究和方案優(yōu)化[J].中國科技信息,2011(20):93-96.
[5] 張恩,張廣弟,蘭磊.基于MongoDB的海量空間數(shù)據(jù)存儲和并行[J].地理空間信息,2014,12(1):46-49.
[6] 馮大輝.開源數(shù)據(jù)庫Sharding技術[J].程序員,2008(7):92-93.
[7] 周煒.云環(huán)境下提升MongoDB自動分片性能研究[J].科技創(chuàng)新導報,2013(29):22-23.
[8] 梁海.MongoDB數(shù)據(jù)庫中Sharding技術應用研究[J].計算機技術與發(fā)展,2014,24(7):60-67.
[9] 姚林,張永庫.NoSQL的分布式存儲與擴展解決方法[J].計算機工程,2012,38(6):40-42.
[10] 莊逸眾.基于LBS移動服務框架設計與實現(xiàn)[D].北京:北京郵電大學,2013.
[11] 張廣弟.分布式環(huán)境下海量空間數(shù)據(jù)的存儲和并行查詢技術研究[D].江西:江西理工大學,2012.
[12] 金安,程承旗,宋樹華,等.基于Geohash的面數(shù)據(jù)區(qū)域查詢[J].地理與地理信息科學,2013,29(5):31-35.
[13] 李成華,張新訪,金海,等.MapReduce:新型的分布式并行計算編程模型[J].計算機工程與科學,2011,33(3):129-135.
RESEARCH ON STORAGE AND PROCESSING OF MONGODB FOR LASER POINT CLOUD UNDER DISTRIBUTED ENVIRONMENT
Xu Xudong Guo Rui Wen Ruijie
(CollegeofComputerScience,BeijingUniversityofTechnology,Beijing100124,China)
In recent years, the application of laser point cloud data has increased drastically. How to efficiently store and fast process the data becomes an important research direction at present. Point cloud data contains a wealth of geographic information, belonging to the spatial data category. Since traditional relational databases are relatively weak in storage and processing of massive spatial data, the application of non-relational databases provides a new perspective of study. Sharding technology is a solution for database level extension. In this paper, Sharding cluster for MongoDB is established under distributed environment, while distributed storage, spatial query and MapReduce operation test for numerous laser point cloud data will be implemented through range-based sharding and Hash-based sharding. The results completely reflect huge advantages of MongoDB under distributed environment in storage and processing for spatial data.
Distribution MongoDB Laser point cloud Sharding cluster Range-based sharding Hash-based sharding
2016-02-20。國家自然科學基金項目(41371434)。徐旭東,副教授,主研領域:數(shù)據(jù)挖掘,大數(shù)據(jù)的組織和處理。郭瑞,碩士生。文瑞潔,碩士生。
TP3
A
10.3969/j.issn.1000-386x.2017.02.012