吳 飛
(福建省基礎(chǔ)地理信息中心,福建福州 350003)
基于MongoDB的LBS數(shù)據(jù)管理系統(tǒng)關(guān)鍵技術(shù)研究
吳 飛
(福建省基礎(chǔ)地理信息中心,福建福州 350003)
首先介紹基于位置的服務(wù)(LBS)系統(tǒng)的主要構(gòu)成,論述數(shù)據(jù)管理系統(tǒng)的重要意義,指出數(shù)據(jù)管理系統(tǒng)建設(shè)中需要重點解決的關(guān)鍵問題,提出采用MongoDB作為文件級別的存儲來解決數(shù)據(jù)存儲查詢的技術(shù)瓶頸,并給出具體的設(shè)計思路,最后證明了基于該技術(shù)路線的數(shù)據(jù)管理系統(tǒng)的可行性。
LBS;MongoDB;數(shù)據(jù)管理
基于位置的服務(wù)(location based service,LBS)是社會信息化發(fā)展的趨勢,是測繪、衛(wèi)星導(dǎo)航、GIS和無線通信網(wǎng)絡(luò)等技術(shù)相集成的產(chǎn)物。LBS近年來發(fā)展較快,在交通、購物、旅游、應(yīng)急、物流等多個行業(yè)得到廣泛應(yīng)用。LBS系統(tǒng)一般由移動終端、位置服務(wù)核心子系統(tǒng)、數(shù)據(jù)存儲管理子系統(tǒng)、監(jiān)控管理應(yīng)用端等四大部分組成。其中,數(shù)據(jù)管理系統(tǒng)負責(zé)存儲上行的終端位置數(shù)據(jù),并提供數(shù)據(jù)檢索功能,數(shù)據(jù)管理系統(tǒng)關(guān)系到LBS平臺的穩(wěn)定性和可擴展性[1-3]。
終端位置數(shù)據(jù)典型特征是數(shù)量巨大但占用字節(jié)并不多,普通的位置數(shù)據(jù)大小不超過200 Byte。假設(shè)一個終端每10 s匯報一個報文,每個終端每天匯報超過8600個報文,假設(shè)LBS平臺設(shè)計10萬并發(fā)量,則每天匯報的報文數(shù)量將超過6億條。如果每個報文都存在數(shù)據(jù)庫中作為一條記錄,即使按月分區(qū)來建立數(shù)據(jù)庫表,10萬臺終端每月上傳的報文也將產(chǎn)生每張260億條記錄的表,顯然如此巨大數(shù)量的報文是不適合用關(guān)系數(shù)據(jù)庫進行存儲的[4]。
MongoDB是基于分布式文件存儲的數(shù)據(jù)庫開源項目,屬于NoSQL數(shù)據(jù)庫的一種。MongoDB是一個可擴展、高性能的數(shù)據(jù)庫,它的主要特性有:①模式自由,支持動態(tài)查詢、完全索引;②面向文檔存儲,易存儲對象類型的數(shù)據(jù),包括文檔內(nèi)嵌對象及數(shù)組,支持二進制數(shù)據(jù)及大型對象(如照片和視頻);③支持復(fù)制和故障恢復(fù),提供主—從、主—主模式的數(shù)據(jù)復(fù)制及服務(wù)器之間的數(shù)據(jù)復(fù)制;④自動分片以支持云級別的伸縮性,支持水平的數(shù)據(jù)庫集群,可動態(tài)添加服務(wù)器[5-9]。
MongoDB適合實時的插入、更新與查詢,并具備應(yīng)用程序?qū)崟r數(shù)據(jù)存儲所需的復(fù)制及高度伸縮性。因此,在LBS數(shù)據(jù)管理系統(tǒng)設(shè)計中,終端的關(guān)鍵業(yè)務(wù)數(shù)據(jù)使用關(guān)系數(shù)據(jù)庫來存儲,而終端位置匯報產(chǎn)生的終端位置則采用MongoDB作為文件級別的存儲,可較好解決高并發(fā)定位數(shù)據(jù)存儲瓶頸問題。
1.總體存儲結(jié)構(gòu)設(shè)計
LBS數(shù)據(jù)管理系統(tǒng)由兩部分組成:一部分是運行在后臺采用MongoDB集群的終端位置數(shù)據(jù)存儲部分,由若干臺數(shù)據(jù)庫服務(wù)器組成;另一部分是基于MongoDB的終端位置數(shù)據(jù)讀寫接口,與位置服務(wù)核心子系統(tǒng)部署在一起,響應(yīng)各移動終端的終端位置查詢與終端位置寫入請求[4]。總體存儲結(jié)構(gòu)如圖1所示。
圖1 總體存儲結(jié)構(gòu)
2.終端位置數(shù)據(jù)存儲設(shè)計
終端位置存儲設(shè)計需要考慮以下3個方面[5]:
1)平衡用戶的讀寫請求,避免單個數(shù)據(jù)庫服務(wù)器的讀寫壓力過大,影響性能。
2)提供冗余,避免一個數(shù)據(jù)庫服務(wù)失效時,導(dǎo)致系統(tǒng)不可用,或是數(shù)據(jù)丟失。
3)隨著移動終端的不斷加入,數(shù)據(jù)不斷膨脹,需要考慮整個存儲系統(tǒng)的水平擴展功能。
為此,在進行終端位置數(shù)據(jù)存儲設(shè)計時需要充分考慮到數(shù)據(jù)庫集群及數(shù)據(jù)分片設(shè)計。終端位置數(shù)據(jù)存儲設(shè)計主要包括以下三點:
(1)MongoDB集群配置
MongoDB的集群配置提供了負載均衡和冗余設(shè)計,包括3種服務(wù)[7]:
1)Slice Server(分片服務(wù)):用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個分片服務(wù)角色可由幾臺機器組成一個復(fù)本集合,以防止主機單點故障。
2)Config Server(元數(shù)據(jù)服務(wù)):存儲集群的元數(shù)據(jù)信息,包括每個塊信息。
3)Route Server(路由服務(wù)):運行MongoDB實例,客戶端從前端路由服務(wù)器接入,實現(xiàn)透明使用。根據(jù)MongoDB的數(shù)據(jù)存儲結(jié)構(gòu),終端位置數(shù)據(jù)庫服務(wù)器集群設(shè)計如圖2所示。
圖2 服務(wù)器集群設(shè)計
存儲系統(tǒng)配置說明如下:
1)分別在3臺服務(wù)器運行一個Mongod(數(shù)據(jù)庫服務(wù)實例),稱為分片服務(wù)11、分片服務(wù)12、分片服務(wù)13,組成一個復(fù)本集合(Replica set1),作為集群的分片1。
2)分別在3臺服務(wù)器運行一個Mongod,稱為分片服務(wù)21、分片服務(wù)22、分片服務(wù)23,組成一個復(fù)本集合(Replica set2),作為集群的分片2。
3)采用3臺機器,每臺機器運行一個Mongod,作為3個元數(shù)據(jù)服務(wù)器。同時每臺機器運行一個Mongos進程(一個自動分片模塊,用于數(shù)據(jù)庫集群,這個集群可以并入動態(tài)增加的機器),作為3個路由服務(wù)器,用于客戶端連接。
4)應(yīng)用端直接連接到路由服務(wù)器,進行數(shù)據(jù)庫讀寫操作。寫入時由路由器根據(jù)相關(guān)的配置進行負載均衡。讀取時,路由器根據(jù)查詢請求的關(guān)鍵字的范圍,將查詢分配到各個分片,并對返回的結(jié)果進行組合,返回給應(yīng)用端。
5)服務(wù)器采用虛擬服務(wù)器,隨著移動終端的增加,可擴展補充新主機,組成新的分片,以分擔(dān)數(shù)據(jù)庫的讀寫壓力。
(2)集群與負載均衡設(shè)計
整個存儲結(jié)構(gòu)采用3個路由服務(wù)器,根據(jù)應(yīng)用端的接入,由路由器從配置服務(wù)器獲取相關(guān)的元數(shù)據(jù)信息,自動決定分配存儲至相應(yīng)分片,避免單一節(jié)點讀寫壓力過大。組成分片的復(fù)本集合的各臺機器采用主從(master-slave)配置,主主機可以讀也可以寫,從主機只可以讀,主從主機按一定的時間隔進行同步[7-8,10]。
由于采用了復(fù)本集合的方式,即使集合中有某一臺機器不能正常運轉(zhuǎn)時,整個存儲系統(tǒng)仍可正常運轉(zhuǎn)。當復(fù)本集合中的主機出現(xiàn)故障時,路由器可以檢測并將寫入請求分配到其他的分片中,通過將從機器切換成主機器,可以快速恢復(fù)該分片的寫入能力。
(3)數(shù)據(jù)分片設(shè)計
移動終端的終端位置數(shù)據(jù)存儲時,隨著時間的推移,單個的集合會變得異常龐大,需要進行合理的設(shè)計,使集群路由器可以將不同的集合分配到不同的分片中,以及對集合進行分塊處理,分配到不同的分片中,以更好地發(fā)揮集群的負載均衡的功能。
數(shù)據(jù)分片設(shè)計主要包括以下兩點:
1)終端位置數(shù)據(jù)集合設(shè)計
將所有的終端位置數(shù)據(jù)存儲在一個集合中時,會使單個集合的數(shù)據(jù)量過于龐大,不利于管理和分配,因此設(shè)計時根據(jù)移動終端的ID范圍,將所有的終端位置數(shù)據(jù)劃分到不同的集合中,由MongoDB的路由決定每個集合的存儲分配。具體的集合劃分見表1(ID以手機號碼分段為例)。
表1 集合設(shè)計
2)集合分片設(shè)計
隨著某一移動終端ID段的集合的數(shù)據(jù)不斷增大,需要對集合進行分塊處理,以更好地發(fā)揮集群的功能。將存儲在MongoDB數(shù)據(jù)庫中的集合進行分片需要選定分片關(guān)鍵字,集群利用分片關(guān)鍵字對文檔進行分片,分配到不同的數(shù)據(jù)庫服務(wù)器。對待寫入的文檔對于分片關(guān)鍵字的選定直接決定了集群中數(shù)據(jù)分布是否均衡、集群性能是否合理。分片關(guān)鍵字要求能夠建立唯一索引。
根據(jù)移動終端位置數(shù)據(jù)的特點,分片關(guān)鍵字設(shè)置為由移動終端的ID與移動終端位置段起點時間共同組成。采用這種方式,可以保證關(guān)鍵字的唯一,并可使終端位置段記錄平均分配到不同的分塊中,從而更好地發(fā)揮集群的性能。
3.終端位置數(shù)據(jù)讀寫設(shè)計
終端位置數(shù)據(jù)讀寫設(shè)計主要包括以下兩點:
(1)服務(wù)器端緩存
由于終端位置是逐點提交的,如果逐點即時寫入數(shù)據(jù)庫中,將產(chǎn)生大量的數(shù)據(jù)庫輸入/輸出(I/O)操作,影響數(shù)據(jù)庫的性能。為此,在服務(wù)器端建一個緩沖區(qū)?;舅枷胧穷A(yù)估(由應(yīng)用層事先統(tǒng)計)同時在線的移動終端的數(shù)量,預(yù)先構(gòu)造內(nèi)存塊列表和移動終端ID的列表,為各移動終端分配緩存,用于存儲終端位置點串數(shù)據(jù),將在線的移動終端上行位置數(shù)據(jù)按用戶ID分組,保存在分配的內(nèi)存塊中,當分配的內(nèi)存塊滿的時候,轉(zhuǎn)換成MongoDB的文檔。為提高內(nèi)存的利用效率,采用定期刷新機制,將內(nèi)存中的終端位置點寫入數(shù)據(jù)庫,同時回收較長時間離線的移動終端占用的緩存塊。
在終端位置查詢時,根據(jù)查詢的ID和時間范圍,除了從數(shù)據(jù)庫中查詢命中的記錄以外,若緩存中存在滿足條件的終端位置點,也要與查詢結(jié)果合并計算,返回給移動終端。采用服務(wù)器端緩存設(shè)計,根據(jù)采用的緩存塊的大小,采用該方法可以將數(shù)據(jù)庫寫操作減小到原來的幾十分之一,甚至百分之一,從而有效減少數(shù)據(jù)庫寫操作。另外,由于終端位置讀取也可以一次讀取若干個終端位置點,也可在較大程度上減小數(shù)據(jù)庫的讀操作。服務(wù)器端緩存設(shè)計如圖3所示。
圖3 服務(wù)器緩存設(shè)計
(2)終端位置I/O流程
根據(jù)服務(wù)器端終端位置緩存設(shè)計,終端位置I/ O操作的流程如下:
1)終端位置點寫入操作流程
當接收移動終端上傳的終端位置點,使用終端位置數(shù)據(jù)寫入方法。終端位置數(shù)據(jù)寫入方法查找或分配新的終端位置緩存塊,將終端位置點放入緩存塊中。當緩存塊滿時,轉(zhuǎn)換成 MongoDB要求的BSON格式,連接到路由服務(wù)器,寫入數(shù)據(jù)庫。
2)終端位置段讀取操作流程
接收 LBS應(yīng)用的查詢請求,根據(jù)查詢的終端ID,以及查詢的終端位置段的時間范圍,連接到路由服務(wù)器,查詢滿足條件的終端位置段,轉(zhuǎn)換為系統(tǒng)定義的格式。若查詢時間包括當前時間,從緩存塊中查詢當前的終端位置點,與數(shù)據(jù)庫查詢結(jié)果合并,返回給應(yīng)用端。
筆者用LoadRunner測試了基于以上思路建設(shè)的數(shù)據(jù)管理系統(tǒng)終端位置匯報的性能,在10 000個終端并發(fā)下的測試結(jié)果見表2。
表2 壓力測試
具體結(jié)果如圖4、圖5所示。
圖4 事務(wù)平均相應(yīng)時間
測試結(jié)果表明,并發(fā)操作中CPU占用率未超過60%,符合正常要求;測試結(jié)果與服務(wù)器硬件配件有一定關(guān)系,服務(wù)器配置高原則上性能更強;通過壓力測試證明基于MongoDB的數(shù)據(jù)管理系統(tǒng)滿足LBS系統(tǒng)運行需求。
圖5 資源利用率
[1] 劉凱,林克正.基于3G網(wǎng)絡(luò)移動設(shè)備位置服務(wù)的應(yīng)用[J].信息技術(shù),2007(12):63-65.
[2] 劉鐵健,李瑞濤,呂彬,等.我國LBS產(chǎn)業(yè)發(fā)展的現(xiàn)狀分析[J].測繪與空間地理信息,2006,29(3):7-8.
[3] 王春.3G時代位置服務(wù)技術(shù)研究[J].通信技術(shù),2010 (5):167-169.
[4] 曹振臻,肖揚.分布式智能交通系統(tǒng)數(shù)據(jù)管理與處理平臺設(shè)計[J].信息技術(shù),2005(12):1-6.
[5] 楊磊.基于NoSQL數(shù)據(jù)庫的結(jié)構(gòu)化存儲設(shè)計與應(yīng)用[J].科技風(fēng),2011(18):103.
[6] 王光磊.MongoDB數(shù)據(jù)庫的應(yīng)用研究和方案優(yōu)化[J].中國科技信息,2011(20):93-94.
[7] 蘭小機,徐齊行,敖杰剛.MongoDB環(huán)境下SaaS多租戶體系模型研究[J].測繪通報,2012(10):25-27,31.
[8] 師德清.基于MongoDB的文件服務(wù)器集群系統(tǒng)的設(shè)計研究[J].信息與電腦:理論版,2012(10):53-54.
[9] 謝華成,范黎林.云環(huán)境下海量非結(jié)構(gòu)化信息存儲技術(shù)探究[J].制造業(yè)自動化,2012,34(8):28-30.
[10] 劉艷俊,敖杰剛,徐齊行.基于 MongoDB云計算下GML分布式集群環(huán)境搭建研究[J].測繪標準化,2012,28(1):5-7.
Key Technology Research of LBS Data Management System Based on MongoDB
WU Fei
P208
B
0494-0911(2014)07-0121-04
2013-04-26
吳 飛(1981—),男,安徽太湖人,碩士,高級工程師,研究方向為GIS開發(fā)與應(yīng)用。
吳飛.基于MongoDB的LBS數(shù)據(jù)管理系統(tǒng)關(guān)鍵技術(shù)研究[J].測繪通報,2014(7):121-124.
10.13474/j.cnki.11-2246.2014.0242