天天看點

毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

小 T 導讀:為了滿足智能駕駛業務的資料處理需求,大疆車載試圖從多家資料庫中進行選型調研,幫助智能駕駛業務提升寫入查詢性能、降低運維成本。本文将分享大疆車載在資料庫選型、系統搭建和業務遷移等方面的經驗。

根據國家發改委、科技部、工信部等 11 個部門聯合印發的《智能汽車創新發展戰略》,到 2025 年,中國标準智能汽車的技術創新、産業生态、基礎設施、法規标準、産品監管和網絡安全體系基本形成。同時,實作有條件智能駕駛的智能汽車達到規模化生産,實作高度智能駕駛的智能汽車在特定環境下市場化應用。目前,随着我國正在積極發展智能網聯汽車,無人駕駛技術進一步推動,網際網路巨頭企業進入市場、加大投入研發技術,無人駕駛市場正處于快速發展階段。無人機頭部企業大疆車載也在去年 4 月份宣布進入智能駕駛領域。

由于目前的智能駕駛業務還是新的業務場景,是以大疆車載在選型上的曆史負擔相對較輕。在 Database 選型要求上,從業務需求出發,主要聚焦在兩點:首先,結合當下的業務場景,需要滿足單台車輛的高頻消息上報頻率;其次,支援在資料量大的時候,通過聚合函數,或選擇函數來快速篩選出需要的資料。

此外,對資料庫要求支援叢集部署的同時,也要求更低的查詢語句編寫上手難度;而且需支援單表千萬量級,在海量資料并發場景下,需要有較高的統計報表能力和較好的查詢 SQL 效率;最後通過資料壓縮、運維成本和并發能力上的考量,最終標明 TDengine 來存儲海量資料。

綜合來看,TDengine 滿足需求的主要原因如下:

  • 國産、開源的時序資料庫(Time Series Database)
  • 開源版支援分布式叢集,友善擴充
  • 列式存儲,資料壓縮比率高,讀寫性能優秀
  • 一個裝置一張表,對應我們一個車輛一張表,模型契合
  • 超級表對于分組聚合查詢的強大支援能力

TDengine 建表思路

作為智能駕駛領域的創新者之一,大疆車載為汽車主機廠提供了軟硬一體的智能駕駛解決方案。其中,車輛雲端平台負責對車輛狀态資訊進行監控,具體包括 GPS、速度、轉速、裡程等,經由 MQTT 流轉到 TDengine 存儲,滿足車輛曆史軌迹回放和車輛實時狀态監控。

車輛消息樣例資料展示如下:

{"message_id": "a78b6d9a","device_key": "deviceKey2","ts": "2022-03-01 15:01:59","longitude": 123.9795647512915,"latitude": 21.58338210717887,"altitude": 51.47800064086914,"signal_strength": 12,"satellites_in_view": 21,"speed": 72.798225,"acceleration": 12,"rpm":2190,"gear": "D","direction": -91.32959,"mileage": 10020,"ip": "10.1.2.3","create_time": "2022-03-01 15:02:03",}      

落腳到實際業務上,我們搭建的表結構如下:

毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

我們落地使用的是 TDengine 2.2.1.3 單機版 ,按照車輛唯一的辨別 DeviceKey 來建立子表,如 device_stat_$deviceKey,一個車輛的狀态資訊都存在一張子表中。mqtt_msg 超級表也是一樣的邏輯,也是以 DeviceKey 來建立子表。

毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

架構與遷移

毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

除了上報的 GPS、速度等,App 端還會和車輛/裝置之間進行大量的指令互動,如下發車輛指令操作,這些我們也是使用 TDengine 來進行存儲和鍊路追蹤的。具體到鍊路消息追蹤的使用上,我們會将裝置與雲端、雲端與 App 之間雙向通信的 MQTT 消息轉發到 Kafka 消息隊列中,然後業務系統進行消費解析,得到 TraceID、消息 ID、消息版本、消息類型、消息時間戳、消息内容等不同字段的資料,然後将其寫入 TDengine 的 mqtt_msg 超級表當中。

除了寫入以外,我們也有一定量的查詢操作,但是整體上還是以寫入為主,目前 TDengine 的性能完全可以滿足我們的需求。不過文本類的檢索并不是 TDengine 最擅長的場景,于是我們接入了 ES 提供部分服務。

由于是項目初期,目前我們暫時還在使用 TDengine 和 MySQL 雙寫新資料,把 MySQL 的 SQL 和 TDengine 的 SQL 做了映射關系,進而實作将曆史資料以日志回放的方式遷移到 TDengine 中去。是以,目前兩個庫暫時可以互為備份,後面等業務完全遷移後,我們就可以使用 TDengine 的叢集多副本功能來完成資料備份了。

此外,濤思資料的從業人員也提供了另外兩種資料遷移方案供我們參考:一是利用 csv 檔案的導出導入。二則是基于一款開源的資料庫遷移工具 DataX,該工具目前已經完成了關系型資料庫(Relational Database)到 TDengine 的适配,實作了 TDengineReader 和 TDengineWriter 兩個插件,遷移時隻要做好相應的 json 檔案配置即可。

毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

性能展示

在應用 TDengine 之後,車輛的實時狀态查詢變得十分簡單,具體展示如下:

1. 查詢單個車輛的上報的最新位置狀态

select last_row(*) from;      
毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

2. 多個車輛的最新位置狀态查詢

select last_row(*) from device_stat where device_key in ('mpVOGpaHqAxGiHWo','HEChzTCZeIWSUysB','HgsIdzvJPeFlVDuT','LVaPHOXkEeTGjTpm','PFHnQCkcXCIBnbsC') group by      
毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

對于車輛曆史時間區間内的狀态查詢,也可以極快地傳回結果,用以進行前端分析。

select * from device_stat_mpVOGpaHqAxGiHWo where ts >'2022-03-17 00:00:00' and ts < '2022-03-18 00:00:00';      
毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

3. 進行 MQTT 消息追蹤時,查詢 MQTT Broker 收發的最新消息

select last_row(*) from;      
毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

4. 按照 requestId 進行消息追蹤

select * from mqtt_msg where request_id = 'f90c46d4-22a3-4ab9-b50a-aad8b237fc57'\G;      
毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

5. 時間區間内消息查詢

select * from mqtt_msg where ts >'2022-03-18 12:00:00' and ts < '2022-03-18 13:00:00';      
毫秒級傳回資料,TDengine 在大疆車載智能駕駛雲端平台上的應用

通過以上的查詢情況彙總可以看出,TDengine 實作了一些選擇特定資料的查詢和輕量的查詢,全部都是毫秒級傳回資料,即便是 30000+ 行資料的查詢,消耗也隻在 1.1 秒左右。

寫在最後

在目前的雲端平台中,TDengine 的應用不僅節約了存儲成本和開發學習成本,同時也表現出了很好的寫入讀取性能,滿足了智能駕駛雲端平台海量時序資料的處理需求。

未來我們會對海量時空資料的應用場景進行持續探索和挖掘,對于 TDengine 我們也有更多的期許,希望它能:

  • 在空間資料的讀寫上有新的特性和更好的支援
  • 擁有更加豐富的認證授權機制,提供更細粒度的權限管控
  • 系統性地豐富各類日志,協助更快地定位問題