毫秒级返回数据,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 2.2.1.3 單機版 ,按照車輛唯一的標識 DeviceKey 來創建子表,如 device_stat_$deviceKey,一個車輛的狀態信息都存在一張子表中。mqtt_msg 超級表也是一樣的邏輯,也是以 DeviceKey 來創建子表。
架構與遷移
除了上報的 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 之后,車輛的實時狀態查詢變得十分簡單,具體展示如下:
1. 查詢單個車輛的上報的最新位置狀態
select last_row(*) from device_stat_deJgTAEzInsZeGLM\G;2. 多個車輛的最新位置狀態查詢
select last_row(*) from device_stat where device_key in ('mpVOGpaHqAxGiHWo','HEChzTCZeIWSUysB','HgsIdzvJPeFlVDuT','LVaPHOXkEeTGjTpm','PFHnQCkcXCIBnbsC') group by device_key;對于車輛歷史時間區間內的狀態查詢,也可以極快地返回結果,用以進行前端分析。
select * from device_stat_mpVOGpaHqAxGiHWo where ts >'2022-03-17 00:00:00' and ts < '2022-03-18 00:00:00';3. 進行 MQTT 消息追蹤時,查詢 MQTT Broker 收發的最新消息
select last_row(*) from mqtt_msg\G;4. 按照 requestId 進行消息追蹤
select * from mqtt_msg where request_id = 'f90c46d4-22a3-4ab9-b50a-aad8b237fc57'\G;5. 時間區間內消息查詢
select * from mqtt_msg where ts >'2022-03-18 12:00:00' and ts < '2022-03-18 13:00:00';通過以上的查詢情況匯總可以看出,TDengine 實現了一些選擇特定數據的查詢和輕量的查詢,全部都是毫秒級返回數據,即便是 30000+ 行數據的查詢,消耗也只在 1.1 秒左右。
寫在最后
在當前的云端平臺中,TDengine 的應用不僅節約了存儲成本和開發學習成本,同時也表現出了很好的寫入讀取性能,滿足了智能駕駛云端平臺海量時序數據的處理需求。
未來我們會對海量時空數據的應用場景進行持續探索和挖掘,對于 TDengine 我們也有更多的期許,希望它能:
在空間數據的讀寫上有新的特性和更好的支持
擁有更加豐富的認證授權機制,提供更細粒度的權限管控
系統性地豐富各類日志,協助更快地定位問題
最后,祝愿 TDengine 越來越好,能夠在中國龐大的時序數據處理場景中脫穎而出,成為國產數據庫中的精品!
👇 點擊閱讀原文,了解體驗 TDengine!
總結
以上是生活随笔為你收集整理的毫秒级返回数据,TDengine 在大疆车载智能驾驶云端平台上的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DHCP,DNS,以及网关的意思和存在意
- 下一篇: 肯塔基大学计算机科学,西肯塔基大学计算机