郝建明, 袁逸濤
(中遠(yuǎn)海運(yùn)科技股份有限公司,上海 200135)
時間序列數(shù)據(jù)(以下簡稱“時序數(shù)據(jù)”)是按數(shù)據(jù)屬性中的時間戳大小排列的一系列記錄值的數(shù)據(jù)。近年來,隨著物聯(lián)網(wǎng)和5G技術(shù)的不斷發(fā)展,時序數(shù)據(jù)在交通、工業(yè)和金融等領(lǐng)域得到了廣泛應(yīng)用。特別是在高速公路領(lǐng)域,由交通運(yùn)輸部主導(dǎo)實(shí)施的“取消高速公路省界收費(fèi)站項(xiàng)目”和“高速公路視頻云聯(lián)網(wǎng)項(xiàng)目”等重大工程,極大地提升了高速公路上電子不停車收費(fèi)系統(tǒng)(Electronic Toll Collection,ETC)門架、智能攝像機(jī)等感知設(shè)備的建設(shè)規(guī)模。這些感知設(shè)備會持續(xù)產(chǎn)生海量的時序數(shù)據(jù),利用好這些時序數(shù)據(jù),可為智慧高速運(yùn)營管理提供更可靠的數(shù)據(jù)分析服務(wù)。
據(jù)調(diào)查,對于ETC門架而言,單一設(shè)備采集的單日數(shù)據(jù)量峰值能達(dá)到上萬條;同時,對于高速公路整體數(shù)據(jù)容量而言,單個省份每年的高速公路時序數(shù)據(jù)存儲容量需求能達(dá)到PB級別。以MySQL和Oracle為代表的傳統(tǒng)關(guān)系型數(shù)據(jù)庫受存儲結(jié)構(gòu)的限制,在數(shù)據(jù)庫設(shè)計(jì)層面無法完成對海量時序數(shù)據(jù)的快速連續(xù)存儲,而關(guān)系型數(shù)據(jù)庫的多路搜索樹(B-Tree)結(jié)構(gòu)在處理時序數(shù)據(jù)的檢索查詢問題時,速度較慢,導(dǎo)致數(shù)據(jù)的實(shí)時分析和展示效果都很差。
時間序列數(shù)據(jù)庫(以下簡稱“時序數(shù)據(jù)庫”)基于時序數(shù)據(jù)的結(jié)構(gòu)特點(diǎn),在數(shù)據(jù)寫入性能、數(shù)據(jù)查詢性能和數(shù)據(jù)存儲壓縮率等3項(xiàng)指標(biāo)上做了針對性優(yōu)化,相比關(guān)系型數(shù)據(jù)庫在性能上有了很大提升。本文對主流的時序數(shù)據(jù)庫進(jìn)行研究,并基于TDengine時序數(shù)據(jù)庫設(shè)計(jì)實(shí)現(xiàn)一套高速公路數(shù)據(jù)集成平臺,解決高速公路海量時序數(shù)據(jù)高效壓縮存儲和快速實(shí)時分析方面的難題,并在寧夏高速公路落地應(yīng)用。
時序數(shù)據(jù)的最大特點(diǎn)是存在唯一的時間戳,在存儲過程中需以時間戳的大小排序,并以時間戳作為同一設(shè)備數(shù)據(jù)的唯一標(biāo)識進(jìn)行區(qū)分。由于物聯(lián)網(wǎng)設(shè)備在某個時刻產(chǎn)生的數(shù)據(jù)基本上不會再發(fā)生變化,因此幾乎不需要對時序數(shù)據(jù)進(jìn)行更新。對于關(guān)系型數(shù)據(jù)而言,經(jīng)常需對已存在的數(shù)據(jù)進(jìn)行更新操作[1]。
此外,時序數(shù)據(jù)的數(shù)據(jù)量會隨著時間的推移持續(xù)呈線性增長。例如,高速公路養(yǎng)護(hù)車輛安裝的定位終端每隔幾秒就會產(chǎn)生新的數(shù)據(jù),在車輛行駛過程中產(chǎn)生的時序數(shù)據(jù)數(shù)量會不斷增加。關(guān)系型數(shù)據(jù)通常不隨著時間的推移持續(xù)增加,在一段時間內(nèi)是相對穩(wěn)定的。
時序數(shù)據(jù)庫針對上述數(shù)據(jù)的特性,通過對時序數(shù)據(jù)的存儲和查詢場景進(jìn)行優(yōu)化,滿足對海量時序數(shù)據(jù)的高效存儲和快速處理的需求。與關(guān)系型數(shù)據(jù)庫相比,時序數(shù)據(jù)庫主要通過優(yōu)化存儲機(jī)制大幅降低存儲空間的開銷,優(yōu)化查詢速率。在時序數(shù)據(jù)分析方面,采用靈活的時間聚合功能、數(shù)據(jù)保留策略和多維度時間范圍查詢等機(jī)制提高數(shù)據(jù)分析速率。
時序數(shù)據(jù)庫的特點(diǎn)[2]一般體現(xiàn)在以下幾個方面。
1) 高吞吐量數(shù)據(jù)高速寫入能力。由于時序數(shù)據(jù)庫的應(yīng)用場景通常持續(xù)產(chǎn)生海量數(shù)據(jù),對寫入速度的要求很高,寫入并發(fā)量很大,這就要求時序數(shù)據(jù)庫能實(shí)現(xiàn)高吞吐量的數(shù)據(jù)高速寫入功能。
2) 高壓縮率。時序數(shù)據(jù)庫需存儲大量數(shù)據(jù),數(shù)據(jù)存儲需求通常是TB級別,甚至達(dá)到PB級別,因此需根據(jù)時序數(shù)據(jù)的特征對數(shù)據(jù)進(jìn)行壓縮存儲,提高數(shù)據(jù)存儲空間的利用率。
3) 高效時間窗口查詢能力。時序業(yè)務(wù)的查詢需求分為2類:一是實(shí)時數(shù)據(jù)查詢,反映當(dāng)前監(jiān)控對象的狀態(tài);二是主要查詢某個時間段的歷史數(shù)據(jù)。歷史數(shù)據(jù)的數(shù)據(jù)量很大,此時需對時間窗口大量數(shù)據(jù)查詢進(jìn)行優(yōu)化。
4) 高效聚合能力。由于時序數(shù)據(jù)使用時間戳作為唯一標(biāo)識,因此在對時序數(shù)據(jù)進(jìn)行分析時會將數(shù)據(jù)的匯聚值作為重要的分析指標(biāo),反映應(yīng)用場景下某個時間段內(nèi)的數(shù)據(jù)整體情況,這意味著時序數(shù)據(jù)庫需提供高效的聚合函數(shù)。
5) 批量刪除能力。時序數(shù)據(jù)通常以時間為數(shù)據(jù)有效性指標(biāo),因此需對過期的數(shù)據(jù)進(jìn)行批量刪除操作。
6) 通常無需具備事務(wù)的能力。時序數(shù)據(jù)庫主要的應(yīng)用場景是數(shù)據(jù)分析和挖掘,很少用于實(shí)現(xiàn)業(yè)務(wù)流程的數(shù)據(jù)流轉(zhuǎn),因此無需具備事務(wù)功能。
由于時序數(shù)據(jù)庫在設(shè)計(jì)之初就與關(guān)系型數(shù)據(jù)庫有明顯區(qū)別,因此其基本屬性也與關(guān)系型數(shù)據(jù)庫不同。時序數(shù)據(jù)庫的基本屬性概念見表1[3]。
表1 時序數(shù)據(jù)庫的基本屬性概念
本文設(shè)計(jì)的高速公路數(shù)據(jù)集成平臺主要用于對各省的高速公路運(yùn)營體系產(chǎn)生的所有數(shù)據(jù)進(jìn)行統(tǒng)一采集、匯聚、存儲、治理、分析、共享和展示,為高速公路運(yùn)營公司搭建數(shù)據(jù)中臺,增強(qiáng)其路網(wǎng)運(yùn)行態(tài)勢感知能力,提高其高速公路運(yùn)營管理水平,提升其高速收費(fèi)效率和服務(wù)能力,保障高速公路的安全性和暢通性。
作為新基建的重要組成部分,智慧高速上安裝有大量物聯(lián)網(wǎng)感知設(shè)備,這些設(shè)備采集的數(shù)據(jù)絕大部分都是時序數(shù)據(jù),因此如何對時序數(shù)據(jù)進(jìn)行存儲、治理、分析、展示和挖掘,已成為高速公路數(shù)據(jù)集成平臺需解決的核心問題之一。
通過對各省的高速公路運(yùn)營公司進(jìn)行調(diào)研發(fā)現(xiàn),在具體的應(yīng)用場景下,對高速公路時序數(shù)據(jù)的本質(zhì)要求是不變性、唯一性和可分析性。因此,高速公路時序數(shù)據(jù)的應(yīng)用需求主要有以下3點(diǎn)。
1) 數(shù)據(jù)高并發(fā)寫入。目前,在各類高速公路物聯(lián)網(wǎng)設(shè)備采集的時序數(shù)據(jù)中,每日入庫的數(shù)據(jù)量已突破億級大關(guān),高效地將如此大批量的時序數(shù)據(jù)入庫已成為高速公路數(shù)據(jù)集成平臺的一個核心需求。
2) 數(shù)據(jù)高效分析。各省高速公路運(yùn)營公司的一個重要職責(zé)是對高速公路路況進(jìn)行實(shí)時監(jiān)測。路況分析的實(shí)時性要求較高,需根據(jù)采集到的時序數(shù)據(jù)快速、可靠地分析出路網(wǎng)的運(yùn)行態(tài)勢,此類數(shù)據(jù)分析的速度需達(dá)到秒級水平。隨著業(yè)務(wù)應(yīng)用場景的不斷拓展,數(shù)據(jù)的復(fù)雜性和分析頻次都會呈指數(shù)級增長,如何快速、高效和準(zhǔn)確地進(jìn)行時序數(shù)據(jù)分析也是高速公路數(shù)據(jù)集成平臺面臨的一大難題。
3) 數(shù)據(jù)的可靠性和安全性。高速公路運(yùn)營體系內(nèi)的部分?jǐn)?shù)據(jù)(例如車輛精細(xì)化收費(fèi)金額)屬于敏感性數(shù)據(jù),因此保障數(shù)據(jù)存儲的可靠性和安全性也是高速公路數(shù)據(jù)集成平臺的核心需求之一。
本文對高速公路運(yùn)營體系內(nèi)的時序數(shù)據(jù)的各類數(shù)據(jù)源進(jìn)行調(diào)研,分析其時序數(shù)據(jù)的特點(diǎn),結(jié)果見表2。
表2 高速公路時序數(shù)據(jù)分析結(jié)果
針對高速公路數(shù)據(jù)集成平臺的時序數(shù)據(jù)的特點(diǎn),對目前主流的InfluxDB、OpenTSDB和TDengine等3款時序數(shù)據(jù)庫產(chǎn)品進(jìn)行選型研究。
根據(jù)前期調(diào)研情況,準(zhǔn)備由ETC門架采集的4 000萬條車牌識別數(shù)據(jù)進(jìn)行選型測試。每條數(shù)據(jù)采集記錄都包含1個時間戳、2個標(biāo)簽符和4個采集數(shù)據(jù)值,由統(tǒng)一的客戶端對服務(wù)端進(jìn)行數(shù)據(jù)推送,推送頻率為10 000條/s。每條數(shù)據(jù)的每個變量所需存儲空間約為20字節(jié)。研究指標(biāo)包含占用存儲空間、百萬數(shù)據(jù)遍歷查詢耗時和千萬數(shù)據(jù)聚合查詢耗時,其中聚合查詢涵蓋COUNT、AVG、SUM、MAX和MIN等常見語法。
此次選型研究采用3臺16核64G內(nèi)存的服務(wù)器搭建存儲集群,服務(wù)器的操作系統(tǒng)均為CentOS Linux release 7.9.2009。占用磁盤空間分析結(jié)果見表3。
表3 占用磁盤空間分析結(jié)果
表4為百萬數(shù)據(jù)遍歷查詢分析結(jié)果,其中G-x中的x用0~39的數(shù)字標(biāo)識分組,每組100萬條記錄(總共4 000萬條數(shù)據(jù),共40組),限于篇幅,本文僅展示前8組(G-02~G-08)的測試結(jié)果。表5為千萬數(shù)據(jù)聚合查詢。
表4 百萬數(shù)據(jù)遍歷查詢分析結(jié)果
表5 千萬數(shù)據(jù)聚合查詢
經(jīng)研究,在相同條件下:對于占用存儲空間指標(biāo),TDengine和InfluxDB的表現(xiàn)較好,3種數(shù)據(jù)庫的各指標(biāo)的差異較??;對于百萬數(shù)據(jù)遍歷查詢分析指標(biāo),TDengine的表現(xiàn)最好,且明顯優(yōu)于OpenTSDB和InfluxDB;對于千萬數(shù)據(jù)聚合查詢耗時指標(biāo),TDengine的表現(xiàn)明顯優(yōu)于InfluxDB和OpenTSDB。
從查詢效率的維度看,InfluxDB的查詢效率與TDengine相差不大,但隨著原始數(shù)據(jù)的設(shè)計(jì)復(fù)雜度的提高,遇到了InfluxDB的查詢效率方面的瓶頸問題。因?yàn)镮nfluxDB沒有明確的基于單一數(shù)據(jù)源的建表方式,若用1張表保存所有類似數(shù)據(jù)源的數(shù)據(jù),數(shù)據(jù)量會很大,查詢性能會下降。比較明顯的是,在百萬數(shù)據(jù)量級以內(nèi),若采用這種建表方式,查詢數(shù)據(jù)所需時間約為1 s,而當(dāng)數(shù)據(jù)到達(dá)千萬量級時,數(shù)據(jù)查詢效率下降十分明顯,無法滿足高速公路數(shù)據(jù)集成平臺的應(yīng)用場景需求[4]。
通過選型研究發(fā)現(xiàn),TDengine在查詢性能維度上的表現(xiàn)較好,滿足高速公路數(shù)據(jù)集成平臺的業(yè)務(wù)查詢需求,且TDengine的集群功能開源,方便橫向擴(kuò)展,具備系統(tǒng)彈性,為國產(chǎn)數(shù)據(jù)庫產(chǎn)品,符合高速公路行業(yè)信息技術(shù)的國產(chǎn)化發(fā)展趨勢。因此,本文最終確定將TDengine作為高速公路數(shù)據(jù)集成平臺的時序數(shù)據(jù)庫。
高速公路數(shù)據(jù)集成平臺以高速公路運(yùn)營管理問題和需求為導(dǎo)向,整合高速公路運(yùn)營體系內(nèi)的所有數(shù)據(jù),對高速公路數(shù)據(jù)進(jìn)行采集、加工、存儲、治理、分析和共享,除了滿足高速公路運(yùn)營公司的使用需求以外,還可滿足不同行業(yè)、不同部門的高速公路交通數(shù)據(jù)應(yīng)用和挖掘分析需求[5]。
本文設(shè)計(jì)的高速公路數(shù)據(jù)集成平臺的總體結(jié)構(gòu)見圖1。
圖1 高速公路數(shù)據(jù)集成平臺的總體架構(gòu)
1) 采集層:主要匯聚外場設(shè)備數(shù)據(jù)和第三方系統(tǒng)提供的業(yè)務(wù)數(shù)據(jù),其中時序數(shù)據(jù)主要來源于各類外場設(shè)備。外場設(shè)備通過不同的通信協(xié)議(MQ、MQTT、AMQP、HTTP、TCP、HJT212、ModBus和NB等),經(jīng)過數(shù)據(jù)傳輸接入平臺中。
2) 硬件層:通過物理服務(wù)器集群搭建私有云平臺,建立虛擬資源池,實(shí)現(xiàn)對服務(wù)器資源的統(tǒng)一規(guī)劃調(diào)度,主要分為計(jì)算資源池、存儲資源池和網(wǎng)絡(luò)資源池。網(wǎng)絡(luò)環(huán)境主要由5G物聯(lián)網(wǎng),以及傳統(tǒng)的收費(fèi)專網(wǎng)、監(jiān)控專網(wǎng)和互聯(lián)網(wǎng)組成,專有網(wǎng)絡(luò)按國家等保二級設(shè)計(jì),兼顧網(wǎng)絡(luò)的安全性和開放性。
3) 數(shù)據(jù)層:以MySQL和TDengine為核心,MySQL用來存儲常規(guī)的關(guān)系型業(yè)務(wù)數(shù)據(jù),TDengine用來存儲時序數(shù)據(jù)。所有數(shù)據(jù)經(jīng)過Kafka消息隊(duì)列處理之后進(jìn)入Redis緩存池,最終存儲到數(shù)據(jù)庫中。所有設(shè)備產(chǎn)生的時序數(shù)據(jù)都由Kafka消息對接進(jìn)行消費(fèi),隨后進(jìn)行噪點(diǎn)清洗,將有用的數(shù)據(jù)及時更新到MySQL和TDengine 中。第三方系統(tǒng)數(shù)據(jù)主要通過中間庫的庫表交換方式與HTTP接口交互。
4) 應(yīng)用支撐層:基礎(chǔ)支撐平臺是支撐平臺應(yīng)用的引擎底座,通過對存儲的數(shù)據(jù)進(jìn)行分析處理,為上層應(yīng)用提供支撐,主要包括數(shù)據(jù)接口認(rèn)證、BI(Business Intelligence)分析工具、GIS(Geographic Information System)地圖、ZooKeeper監(jiān)測工具、智慧高速算法引擎和視頻智能分析算法等基礎(chǔ)支撐服務(wù)。
5) 應(yīng)用層:在對數(shù)據(jù)進(jìn)行處理分析之后,為平臺用戶提供實(shí)時路況分析、擁堵治理、交通流量監(jiān)測和匝道智能控流等多個應(yīng)用場景。
由于高速公路運(yùn)營體系內(nèi)的各種設(shè)備的協(xié)議和上報的數(shù)據(jù)都是不同的,因此本文將公共屬性(如位置、方向、所屬高速、所屬片區(qū)、所屬廠家和設(shè)備類型等)作為超級表標(biāo)簽,將共有參數(shù)(如車速、車牌號、車型和車種等)作為普通列,將時間戳+設(shè)備編號作為超級表主鍵,將其他非共有參數(shù)作為子表字段[6]。
以ETC門架的子表為例,其結(jié)構(gòu)見表6。
表6 ETC門架子表結(jié)構(gòu)
高速公路數(shù)據(jù)集成平臺的數(shù)據(jù)持久化流程見圖2,外場設(shè)備和第三方數(shù)據(jù)通過不同的采集方式進(jìn)入數(shù)據(jù)解析服務(wù)中。HTTP服務(wù)和MQTT服務(wù)適合定時數(shù)據(jù)獲取,數(shù)據(jù)定時抽取的形式通過開發(fā)定時任務(wù)定義,數(shù)據(jù)同步策略有全量同步和增量同步2種。
圖2 高速公路數(shù)據(jù)集成平臺的數(shù)據(jù)持久化流程
數(shù)據(jù)解析服務(wù)通過建立數(shù)據(jù)過濾規(guī)則引擎,根據(jù)已有的規(guī)則參數(shù)進(jìn)行數(shù)據(jù)過濾,從完整性、有效性、準(zhǔn)確性、及時性和規(guī)范性等方面對數(shù)據(jù)過濾規(guī)則進(jìn)行處理,確保數(shù)據(jù)的時效性和數(shù)據(jù)質(zhì)量滿足要求,實(shí)現(xiàn)數(shù)據(jù)全壽命周期管理,保證數(shù)據(jù)記錄可追溯。
在過濾數(shù)據(jù)之后,進(jìn)一步對過濾的數(shù)據(jù)進(jìn)行結(jié)構(gòu)化解析,由Kafka消息隊(duì)列處理之后進(jìn)入Redis緩存。每個發(fā)送給Kafka的消息都有一個主題,對數(shù)據(jù)進(jìn)行分類處理。由Redis訂閱Kafka的主題,對數(shù)據(jù)進(jìn)行區(qū)分,關(guān)系型數(shù)據(jù)存入MySQL中,時序數(shù)據(jù)存入TDengine中。
本文設(shè)計(jì)的高速公路數(shù)據(jù)集成平臺已在寧夏高速公路運(yùn)營公司落地應(yīng)用,使用3臺16核64G內(nèi)存、4T硬盤的服務(wù)器搭建了3個節(jié)點(diǎn)3個副本的TDengine集群,為寧夏高速公路運(yùn)營公司提供了路網(wǎng)運(yùn)行態(tài)勢感知、路網(wǎng)流量分析監(jiān)測、路網(wǎng)流量預(yù)測研判和高速公路出入口智能管控等多種應(yīng)用場景。
在投入使用2個月之后,高速公路數(shù)據(jù)集成平臺已集成時序數(shù)據(jù)約5億條,峰值數(shù)據(jù)寫入速度達(dá)到了1.5萬行/s。原始數(shù)據(jù)容量約為708 GB,經(jīng)過壓縮之后為67 GB,數(shù)據(jù)壓縮率達(dá)到了約9%,疊加使用TDengine數(shù)據(jù)過期刪除機(jī)制,大幅節(jié)約了存儲成本。同時,在當(dāng)前高并發(fā)寫入規(guī)模下(0.5萬~1.5萬行/s),CPU(Central Processing Unit)資源占用率不到1%,內(nèi)存占用只有2G,節(jié)約了大量服務(wù)器計(jì)算資源,為數(shù)據(jù)集成平臺的數(shù)據(jù)分析節(jié)約了更多算力資源(見圖3)。
圖3 CPU占用率隨時間的變化曲線
與傳統(tǒng)的MySQL分區(qū)+索引處理各類時序數(shù)據(jù)的模式相比,時序數(shù)據(jù)入庫的性能提升了4倍,各類查詢性能提升了3~10倍。
基于TDengine實(shí)現(xiàn)的多個應(yīng)用場景運(yùn)行效果良好,以寧夏高速公路路網(wǎng)流量分析監(jiān)測應(yīng)用為例(見圖4),高速公路數(shù)據(jù)集成平臺對車輛定位數(shù)據(jù)、高德地圖實(shí)時路況數(shù)據(jù)和ETC門架數(shù)據(jù)進(jìn)行匹配分析,對空間和時間進(jìn)行多角度、多粒度分析,深度挖掘數(shù)據(jù),結(jié)合歷史數(shù)據(jù)進(jìn)行流量態(tài)勢計(jì)算,進(jìn)一步實(shí)現(xiàn)了短時流量預(yù)測,為高速公路運(yùn)營公司掌握車流分布、實(shí)時監(jiān)測重點(diǎn)管控區(qū)域的車流量提供了直觀可視化展示功能,為人力、物資安排和高速公路出入口管控措施的實(shí)施提供了決策支持。
圖4 寧夏高速公路流量分析監(jiān)測應(yīng)用
本文通過研究時序數(shù)據(jù)庫指標(biāo)的特性,結(jié)合高速公路時序數(shù)據(jù)的特點(diǎn),基于TDengine時序數(shù)據(jù)庫設(shè)計(jì)實(shí)現(xiàn)了一套高速公路數(shù)據(jù)集成平臺,解決了關(guān)系型數(shù)據(jù)庫無法滿足高速公路信息化領(lǐng)域的海量時序數(shù)據(jù)存儲和高效查詢需求的難題。該平臺已在寧夏高速公路落地應(yīng)用,結(jié)果表明其能在智慧高速的路網(wǎng)運(yùn)行態(tài)勢感知、實(shí)時路況分析、擁堵治理、交通流量監(jiān)測和匝道智能控流等多個應(yīng)用場景下發(fā)揮作用,有效支撐高速公路運(yùn)營管理決策分析,為高速公路大數(shù)據(jù)的分析和應(yīng)用提供了一種新的研究思路。