关于数据库:替代-ElasticsearchTDengine-助力四维图新将存储空间利用率提升-8-倍

34次阅读

共计 2450 个字符,预计需要花费 7 分钟才能阅读完成。

小 T 导读:面对海量的车载轨迹数据,四维图新数据存储面对十分大的压力——每分钟的轨迹数据大略有 2000 万条记录,他们此前应用的 Elasticsearch 存储形式不仅造成了重大的物理资源节约,还存在查问瓶颈,所以急需转换数据存储中间件。本文讲述了四维图新在数据库选型测试、搭建与迁徙等方面的相干实践经验。

企业简介

四维图新成立于 2002 年,是中国导航地图产业的开拓者。经十余年的翻新倒退,其已成为导航地图、导航软件、动静交通信息、地位大数据以及乘用车和商用车定制化车联网解决方案畛域的领导者。现在,四维图新以全面的技术倒退策略迎接汽车“新四化”时代的降临,致力于以高精度地图、高精度定位、云服务平台以及利用于 ADAS 和主动驾驶的车规级芯片等外围业务,打造“智能汽车大脑”,赋能智慧出行,助力美好生活,成为中国市场乃至寰球更值得客户信赖的智能出行科技公司。

我的项目介绍

在某车企我的项目中,面对车载轨迹数据 2000 万 / 分钟的写入量,整体数据存储的压力十分之大。此前咱们采纳的是 Elasticsearch,共设置了 15 个节点(32 核 / 48GB 内存 / 2TB 磁盘空间),不到半个月磁盘占用量就曾经达到 80% 了,十分耗用物理资源。同时大量的 IO 操作不仅导致 PaaS 层不稳固,也波及到了其余的依赖资源,如云主机、中间件等。在此背景下,转换数据存储中间件曾经火烧眉毛。

从数据特点和解决需要登程,咱们抉择了更加业余的时序数据库。从数据插入、查问、存储性能晋升,硬件或云服务老本升高、设计架构简化和集群版本开源这四个维度进行选型思考,最终咱们初步抉择了 TDengine,随即便着手进行模仿测试。

一、选型测试

针对时序数据库 TDengine 的写入性能劣势,咱们选取了一些业务场景接入的轨迹数据进行写入测试,测试环境如下图所示:

咱们以 40 万记录 / 天 / 辆车,共计 150 天、120 辆车的数据进行写入测试,写入的记录总数为 72 亿,总线程数为 40,最终的写入和存储性能对比方下图:

总结:相比 Elasticsearch,TDengine 的存储空间利用率晋升 8 倍,写入性能晋升 2.5 倍。

因为之前 blocks 只有默认的值,所以在后续测试中咱们依照业务理论场景批改成了 100,将每 Vnode 写入缓存块数做了适当的优化。

之后咱们从单日数据、单辆车数据、单日单车数据三个维度对 TDengine 进行查问测试,测试后果如下图所示:

总结:相比 Elasticsearch,TDengine 的“count()”查问性能晋升 4 倍,“select”查问性能晋升 3-10 倍。

此外,TDengine 反对查问单个设施一个时间段数据的需要,和咱们的业务场景不约而同;它的类 SQL 设计也十分便当,简直不须要学习老本,运维治理老本也简直为零。同时,它还是国产开源数据库,相比其余开源软件,能给中国的软件工程师提供更好的本地服务。作为一款齐全自主研发的时序数据库,TDengine 的稳定性和安全性也曾经被很多企业验证过,绝对曾经比拟成熟了。

通过多重测试和考量,最终咱们抉择将 TDengine 接入到零碎之中,以撑持当下的业务需要。

二、理论运行

在接入 TDengine 之后,业务上近实时的写入大量轨迹数据的需要轻松实现,数据部门能够日更亿级轨迹数据,在达成存储要求的同时,查问性能也能满足上游的业务团队应用。整体架构图如下:

在表构造的搭建上,咱们是依照设施和众包车的编码设置的 tag,建设了如下所示的索引关系。

而具体到理论业务中,TDengine 依然体现出上述测试所展现出的优良性能。以存储性能为例, 之前咱们应用 ES 集群时,15 个节点只能反对 3 个月的数据存储,在接入 TDengine 之后,7 个同样配置的集群,曾经撑持了 5 个月的数据存储。

三、教训分享

实际上,在数据迁徙工作中,咱们的本地业务从 Elasticsearch 迁徙到 TDengine 的过程并不简单。一是因为 TDengine 反对的编程语言十分多,且是采纳与 MySQL 类似的 SQL 语言,这种个性极大地简化了迁徙所需的资源老本和人力老本。此外,通过咱们自研的传输工具,300T+ 数据的迁徙工作在短时间内就实现了。

在具体实现上,传输工具是采纳多线程形式将数据读取到 CSV,而后再批量写入到新的集群中,示例代码如下图所示:

除此之外,在 TDengine 的利用上,咱们也遇到了一些小问题,在涛思数据搭档们的通力合作下,最终问题也都失去了解决。借此机会将这些教训分享进去,给大家一些参考。

咱们有一个场景是“在页面上画一个矩形框”,刚开始咱们是间接应用经纬度进行轨迹点数据的获取,所需的工夫十分长,根本没法应用,代码如下所示:

在优化之后,咱们应用 Spark 程序动静去申请,通过经纬度获取某类型车的轨迹点个数,通过划取工夫点的形式,达到了最终的成果:

在前期应用 TDengine 进行多维度、大数据量查问的时候,呈现了查问性能线性降落的问题,前面咱们通过查问官网材料,再比照本地的集群配置参数以及数据建模形式,最终找到了性能问题的起因,而后联合本地利用场景以及将来业务规模进行了重新配置和数据建模,胜利解决了查问性能的问题。

所以,如果大家在利用 TDengine 的过程中呈现了一些问题,倡议能够先去官网查找材料,官网文档十分全面,能够称得上是 TDengine 应用的“百科全书”了,一些小问题都能够在这里找到解决办法。

四、写在最初

基于 TDengine 在当下业务中所体现出的优异成绩,咱们在将来思考向 TDengine 中接入更大规模的轨迹数据以及其余业务中的时序数据。也心愿将来咱们能借力 TDengine,实现大量的轨迹计算及开掘,将公司外部的数据实现疾速变现,减速充电桩业务的倒退,依赖 LBS 帮忙客户开掘更多的潜在客户,实现多边共赢。

作者简介

曹志强,四维图新位置服务部门数据平台负责人,次要负责解决整个团体的数据接入、存储、查问和应用,撑持公司外部主动驾驶和智慧城市的数据治理工作。


想理解更多 TDengine 的具体细节,欢送大家在 GitHub 上查看相干源代码。

正文完
 0