共计 3091 个字符,预计需要花费 8 分钟才能阅读完成。
小 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 之后,车辆的实时状态查问变得非常简略,具体展现如下:
- 查问单个车辆的上报的最新地位状态
select last_row(*) from device_stat_deJgTAEzInsZeGLM\G;
- 多个车辆的最新地位状态查问
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';
- 进行 MQTT 音讯追踪时,查问 MQTT Broker 收发的最新消息
select last_row(*) from mqtt_msg\G;
- 依照 requestId 进行音讯追踪
select * from mqtt_msg where request_id = 'f90c46d4-22a3-4ab9-b50a-aad8b237fc57'\G;
- 工夫区间内音讯查问
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 Database 的具体细节,欢送大家在 GitHub 上查看相干源代码。