喬彥克++陸婷
摘要:旅行時間計算是智能交通系統(tǒng)研究的重要內(nèi)容,準確的旅行時間計算結(jié)果可以為交通管控部門提供決策支持,緩解交通擁堵情況。近年來,隨著監(jiān)測水平的提高,交通監(jiān)測數(shù)據(jù)呈現(xiàn)海量增長趨勢。傳統(tǒng)的關系型數(shù)據(jù)庫應對海量數(shù)據(jù)時存在高并發(fā)讀寫和擴展性不足等瓶頸。為解決智能交通因數(shù)據(jù)規(guī)模過大帶來的存儲和查詢問題,提出了一種基于HBase的交通旅行時間計算方法,設計了面向查詢優(yōu)化的行鍵策略,并在此基礎上提出了單時段及多時段旅行時間計算方法。實驗表明,該計算方法與傳統(tǒng)的基于Oracle的算法相比,時間效率提高2~3倍,并且有較高的讀寫性能及良好的可擴展性。
關鍵詞:旅行時間;海量數(shù)據(jù);HBase;智能交通
DOIDOI:10.11907/rjdk.151383
中圖分類號:TP301
文獻標識碼:A 文章編號文章編號:16727800(2015)008002204
基金項目基金項目:北京市自然科學基金重點項目(4131001);北京市屬高等學校創(chuàng)新團隊建設與教師職業(yè)發(fā)展規(guī)劃項目(IDHT20130502);北京市教育委員會科技計劃重點項目(KZ201310009009);北方工業(yè)大學科研啟動基金項目(2014)
作者簡介作者簡介:喬彥克(1989-),男,河南漯河人,北方工業(yè)大學大規(guī)模流數(shù)據(jù)集成與分析技術(shù)北京市重點實驗室碩士研究生,研究方向為分布式數(shù)據(jù)庫;陸婷(1990-),女,山東菏澤人,北方工業(yè)大學大規(guī)模流數(shù)據(jù)集成與分析技術(shù)北京市重點實驗室碩士研究生,研究方向為流數(shù)據(jù)的存儲優(yōu)化。
0 引言
交通旅行時間計算是智能交通領域的一個重要研究內(nèi)容,精準的旅行時間計算、評估可以為城市路網(wǎng)規(guī)劃、城市道路交通管理與控制提供重要依據(jù),為道路交通的研究、交通規(guī)劃設計、交通管理部門提供決策輔助支持,對城市交通擁堵問題起到一定的緩解作用。
隨著智能交通的迅速發(fā)展,大量監(jiān)測設備用于交通數(shù)據(jù)的采集。以某大型城市的車輛識別數(shù)據(jù)為例,道路上部署的車輛識別傳感器數(shù)量為5 000個,每個傳感器的高峰采樣頻率為1條/秒,則每秒將產(chǎn)生5 000條車輛識別數(shù)據(jù),每天的高峰折算率為0.33,一年車輛識別數(shù)據(jù)記錄數(shù)將超過500億條,數(shù)據(jù)存儲量為10TB級(來自實際項目)。面對如此規(guī)模的數(shù)據(jù),傳統(tǒng)的關系型數(shù)據(jù)庫無法直接有效地滿足海量時序數(shù)據(jù)的存儲和處理請求,存在擴展能力差、寫入延遲高等問題,并且傳統(tǒng)的旅行時間計算大多是基于車輛采樣數(shù)據(jù)或者浮動車數(shù)據(jù)等非全樣數(shù)據(jù),在反映路段旅行時間的分布上存在一些問題。作為新型的數(shù)據(jù)處理技術(shù),HBase[1]已經(jīng)在監(jiān)測數(shù)據(jù)的大規(guī)模存儲方面得到應用,文獻[2]就把HBase作為大規(guī)模無線傳感網(wǎng)的存儲媒介。
為解決上述問題,本文提出了一種基于HBase的交通旅行時間計算方法,針對海量交通監(jiān)測數(shù)據(jù)需求,以HBase這種NoSQL類型的數(shù)據(jù)庫作為監(jiān)測數(shù)據(jù)的基礎存儲系統(tǒng),并在此基礎上進行旅行時間的全樣數(shù)據(jù)計算;實驗表明,該計算方法更準確,且滿足可擴展性與高并發(fā)性。
1 相關工作
旅行時間是交通出行服務水平的重要衡量指標,近年來對旅行時間的研究日益增多。從檢測技術(shù)角度來看,通常有基于線圈的估計,基于浮動車的估計和基于車牌識別的估計等[3]。從數(shù)據(jù)來源看,目前的旅行時間估計所用數(shù)據(jù)主要有兩類:一是仿真數(shù)據(jù),二是檢測數(shù)據(jù)。在檢測數(shù)據(jù)中,部分使用直接測量樣本車輛的旅行時間來進行路段旅行時間的估計,如基于浮動車和車牌識別等,但因是非全樣數(shù)據(jù),因此在反映路段旅行時間的分布上存在一定問題。本文采用全樣的實測車牌識別數(shù)據(jù)對旅行時間進行計算。
目前數(shù)據(jù)的存取技術(shù)主要有以下幾種:(1)傳統(tǒng)的關系型數(shù)據(jù)庫。在數(shù)據(jù)存儲方面,只能采用結(jié)構(gòu)化的數(shù)據(jù)模式,不支持海量數(shù)據(jù)的存儲,嚴格遵循ACID原則使其不適合大量數(shù)據(jù)的定期更新,基于“極少發(fā)生節(jié)點失效”的假設而構(gòu)建的傳統(tǒng)關系型數(shù)據(jù)庫不適用于節(jié)點失效經(jīng)常發(fā)生的大規(guī)模集群應用場景;在數(shù)據(jù)查詢方面效率極其低下。
(2)HDFS/MapReduce。目前主流的大規(guī)模數(shù)據(jù)處理技術(shù)Hadoop/MapReduce是專為離線處理和大規(guī)模數(shù)據(jù)分析而設計的[4],缺乏實時隨機存取數(shù)據(jù)的能力。車牌識別數(shù)據(jù)是連續(xù)的時間流數(shù)據(jù),不適合Hadoop的存儲模式——存儲少量非常大的文件。文獻[5]雖然提出了一種MapReduce下計算旅行時間的方法,但其可用性受到制約,這些數(shù)據(jù)無法實時查詢,執(zhí)行一個任務計算的都是全部數(shù)據(jù),如果只需要計算某個時段的旅行時間,該方法往往無能為力。
(3)HBase[6]。它是構(gòu)建在Hadoop之上的一種NoSQL數(shù)據(jù)庫,具有高可靠、高可擴展的特點,支持隨機讀寫并且有出色的寫入性能和不錯的查詢性能。
綜上所述,HBase最符合存儲海量監(jiān)測數(shù)據(jù)的需求,故本文以HBase作為海量車牌識別數(shù)據(jù)的存儲引擎。
2 基于HBase的旅行時間計算
2.1 存儲系統(tǒng)架構(gòu)
圖1所示為識別數(shù)據(jù)存儲架構(gòu),數(shù)據(jù)寫入部分采用Loadrunner模擬實時數(shù)據(jù)的生成并寫入HBase數(shù)據(jù)庫,其中模擬數(shù)據(jù)來自實際監(jiān)測的數(shù)據(jù),旅行時間的計算則是通過計算HBase的結(jié)果得到。
圖1 車牌識別數(shù)據(jù)存儲架構(gòu)
對于不同日期采集的監(jiān)測數(shù)據(jù),有些系統(tǒng)會采用按天建表的策略,此策略的好處在于錄入速度快,當用戶請求一天范圍內(nèi)的數(shù)據(jù)時,只需要訪問當日的數(shù)據(jù)表。但是隨著時間的推移,越來越多的表難于管理,且當用戶請求多日的數(shù)據(jù)時會訪問多張數(shù)據(jù)表,影響訪問性能。本文采用將車牌識別數(shù)據(jù)遷移到HBase集群中,采用一張大表存儲的方法,車牌數(shù)據(jù)記錄條目達上億級別。
HBase是為面向億行級別的表設計的,可以很好地滿足海量數(shù)據(jù)擴展要求。但是HBase只能使用按字典序排列的行鍵來檢索記錄,因此行鍵的設計尤為重要。在介紹優(yōu)化查詢的行鍵設計策略之前,先介紹相關概念定義。
2.2 相關概念
概念1 車輛旅行時間(Travel time):車輛從進入到離開某一路段所花費的時間;
概念2 路段旅行時間:單位時間內(nèi)該路段經(jīng)過車輛的旅行時間平均值;
概念3 車牌識別數(shù)據(jù):監(jiān)測點識別到的車輛數(shù)據(jù),包括車牌號、車身顏色、記錄時間、監(jiān)測點ID等信息;
概念4 行鍵(Row key):用于唯一標識HBase表的每一行,沒有數(shù)據(jù)類型,視為字節(jié)數(shù)組[1]。
綜合考慮,本文的旅行時間指路段旅行時間,選取15分鐘和5分鐘兩個長度的時間段進行計算研究。
定義1:此公式用于計算一輛車在某路段的旅行時間,由離開該路段監(jiān)測點時間與進入該路段監(jiān)測點時間差值得出。
定義2:此公式用于計算某路段的旅行時間,為n輛車旅行時間的均值。
結(jié)合具體應用場景,本文旅行時間計算首先對原始車牌識別數(shù)據(jù)進行存儲,然后通過HBase讀取數(shù)據(jù)并進行計算。
2.3 查詢優(yōu)化的行鍵設計策略
HBase數(shù)據(jù)庫系統(tǒng)不同于傳統(tǒng)的關系數(shù)據(jù)庫,它沒有特定模式,建模工作需要數(shù)據(jù)庫設計人員來完成。為了提高數(shù)據(jù)的查詢性能,必須結(jié)合應用場景設計出能高效查詢的行鍵,Opentsdb[7]就采用了高效的復合行鍵設計模式,通過把不同監(jiān)測指標放入合適位置,組合成能夠高效檢索的行鍵。車牌識別數(shù)據(jù)由監(jiān)測時間、車牌號、監(jiān)測點ID、車輛顏色、車輛大小等不同的監(jiān)測信息組成,且主要的查詢條件為時間、監(jiān)測點和車牌號。
由于HBase不支持二級索引,故本文采用復合行鍵。
行鍵可選方案(部分)如下:
方案1:
該方案中行鍵由時間監(jiān)測點ID和車牌號復合而成,車牌識別數(shù)據(jù)按時間順序存儲。其中
方案2:
該方案中識別數(shù)據(jù)按監(jiān)測點排序,同一監(jiān)測點下的數(shù)據(jù)順序存儲。其中
方案3:
該方案中識別數(shù)據(jù)按車牌號順序存儲,行鍵以車牌號起始。其中
以上是幾種復合行鍵方案,方案一以時間為主要索引字段,也就是在時間這個維度上對整個表進行排序,相同監(jiān)測點ID下包含不同的車牌號;方案二以監(jiān)測點為主要索引字段,相同監(jiān)測點的數(shù)據(jù)在HBase中按時間順序連續(xù)存放;方案三以車牌號為主要索引字段,相同車牌號的數(shù)據(jù)按監(jiān)測點順序連續(xù)存放。
對車牌識別數(shù)據(jù)這類交通監(jiān)測數(shù)據(jù)的查詢主要是基于時間斷面的查詢。時間是定位結(jié)果的最關鍵因素。因此,本文以方案一作為HBase識別數(shù)據(jù)表的行鍵設計方案。
實際應用中行鍵結(jié)構(gòu)如表1所示。
采用方案一的時間在前復合行鍵,使得基于時間條件的查詢效率非常高(避免了全表掃描),除了應用于旅行時間的計算外,還適合很多智能交通的應用場景,如交通流的計算等。
目前HBase跨列族的數(shù)據(jù)訪問效率較低[5],故本文的識別數(shù)據(jù)表采用一個列族來存放識別數(shù)據(jù)。
2.4 旅行時間并行計算
在描述具體算法前先介紹以下定義:
(1) HashMap
(2) HashMap
(3) startTime,旅行時間計算的起始時間。
(4) stopTime,旅行時間計算的停止時間。
(5) result,給定時間范圍內(nèi)的HBase數(shù)據(jù)集。
(6) List travelTime,各路段在給定時段的旅行時間。
單個時段旅行時間計算算法(STP)描述如下:
INPUT:startTime,stopTime
OUTPUT:OUTPUT :travelTime
Begin
根據(jù)startTime,和stopTime,設定HBase掃描起止行鍵;
根據(jù)起止行鍵掃描HBase,得到查詢結(jié)果集result;
遍歷result,得到不同車輛的軌跡數(shù)據(jù)trackMap;
遍歷trackMap,比對路段信息,得到不同車輛經(jīng)過不同路段的旅行時間travelTimeMap;
遍歷travelTimeMap;
If 路段的旅行時間list非空,取總旅行時間的均值,并將結(jié)果存放在travelTime中
End
連續(xù)時段旅行時間計算算法(MTP):
對于多個連續(xù)時間段的旅行時間計算,本文采用多線程的方法,并行對各個時間段的旅行時間進行處理。
圖2是旅行時間計算過程中數(shù)據(jù)流動示意圖,由最初存儲在HBase中的車牌識別數(shù)據(jù),經(jīng)過多層處理,得到不同路段的旅行時間。
圖2 旅行時間計算數(shù)據(jù)流動
3 實驗分析
實驗平臺物理架構(gòu)見圖3。
各模塊設備配置:三臺雙核3.0 GHz CPU和4G內(nèi)存的Loadrunner服務器,使用Loadrunner模擬識別數(shù)據(jù)的實時寫入過程。4個節(jié)點的HBase集群,1個主節(jié)點,3個從節(jié)點。集群配置為四核2.4GHz CPU,8GB內(nèi)存,CentOS 6.4 64位操作系統(tǒng),Hadoop版本為1.2.1,HBase版本為0.94.14。
實驗方法:首先對單個時段旅行時間計算進行對比分析,選取5分鐘和15分鐘作為基本計算時段;然后對多時段的旅行時間采用MTP方法計算,以15分鐘作為基本的旅行時間計算單位。
綜合分析以上結(jié)果,可以發(fā)現(xiàn),HBase和Oracle的計算時間變化基本吻合,且計算時間優(yōu)于Oracle,而且二者進行并行計算的總時間也與數(shù)據(jù)量呈正相關關系。
通過以上實驗可以看出,通過HBase存儲車牌識別數(shù)據(jù)并在此基礎上計算旅行時間,其性能優(yōu)于傳統(tǒng)的Oracle數(shù)據(jù)庫,對于全樣數(shù)據(jù)下的旅行時間計算,計算時間和數(shù)據(jù)量呈正相關。相對Oracle,HBase具有很強的擴展性。
4 結(jié)語
本文試驗性地將交通監(jiān)測數(shù)據(jù)由傳統(tǒng)關系數(shù)據(jù)庫遷移到新型NoSQL數(shù)據(jù)庫HBase上,并在此基礎上進行了道路旅行時間的計算,對于處理這一類時序數(shù)據(jù)具有借鑒意義。由實驗可以看出,相對關系數(shù)據(jù)庫,HBase在計算旅行時間時性能提升2~3倍,而且HBase集群容易大規(guī)模擴展,可以作為構(gòu)建大規(guī)模數(shù)據(jù)存儲系統(tǒng)的基礎存儲架構(gòu)。
參考文獻:
[1] LARS GEORGE.HBase 權(quán)威指南[M].代志遠,劉佳,蔣杰,譯.北京:人民郵電出版社,2013.
[2] 陳慶奎,周利珍.基于HBASE的大規(guī)模無線傳感網(wǎng)絡數(shù)據(jù)存儲系統(tǒng)[J].計算機應用,2012,32(7):19201923,1977.
[3] 柴華駿,李瑞敏,郭敏.基于車牌識別數(shù)據(jù)的城市道路旅行時間分布規(guī)律及估計方法研究[J].交通運輸系統(tǒng)工程與信息,2012,12(6):4147.