TDengine 助力京东云 IoT 数据统计改造

2022-03-22 00:00:00 数据 时序 时间 设备 聚合

2014 年起,京东从智能家居领域开始发力,在业界率先推出语音交互入口-叮咚智能音箱,实现了广泛的设备品类互联生态,同时整合集团内部零售、物流、大健康、工业品等关键领域的物联网技术能力,持续助力社区、城市、车联、工业等关键行业领域,广泛服务于实体经济,助力企业转型升级。本文在京东云 IoT 多年来行业实践经验积累的基础上,分享在数据存储方面的一些做法。

一、场景与痛点

数据是数字化时代企业的核心资产。京东云智能家居场景维护着大量的智能设备,这些设备联网后,会根据设备设定的速率持续产生时序数据,比如有的设备采样间隔是 15 秒。京东云 IoT 团队结合本公司数据特点与业务需求,对多种工业时序数据库进行了技术选型,以解决庞大的数据存储和计算带来的挑战:

  • 数据存储具有较高的数据压缩比,节约存储资源,降低 IT 成本
  • 写入和查询性能优异,数据库底层逻辑的优化可以减少 CPU 开销
  • 支持数据预聚合,拥有丰富的计算算子
  • 强有力的稳定架构

二、技术选型

我们对两种业界主流的时序数据库做了分析和测试:

  • OpenTSDB:基于 HBase 的分布式、可伸缩的时间序列数据库。作为基于通用存储开发的时序数据库典型代表,起步比较早,在时序数据库领域的认可度相对较高,但 HBase 成本高的问题无法免除。
  • TDengine:在性能、成本、运维难度等方面都表现不俗,支持横向扩展,且高可用。

通过实际对比测试,我们初步选定 TDengine 作为数据存储方案。TDengine 相比于 OpenTSDB 有明显的优势:

  • TDengine 写入吞吐量高出 200%
  • 1 亿条记录平均查询时间提升 100 倍
  • 100 万条记录读取时间提升 32 倍
  • 1 亿条记录按时间分组取均值时间提升 40 倍
  • 成本开销降低 2-3 倍

三、数据建模

TDengine 数据建模需根据数据的特性设计相应的 Schema,以达到好的性能表现。对于物联网设备而言,是围绕着设备孪生工作的。设备有对应的物类型、物模型,物模型描述了设备的属性感知和交互行为。因此,我们基于物类型、物模型进行了 Schema 的设计:

  • 基于物类型、物模型创建超级表
  • 数据聚合以字表为维度,按照物模型及数据特性,选择不同的聚合算子进行聚合

超级表举例如下:

四、落地实施

结合业务需求与数据特点,我们采用的方案是:将设备上报的元数据存储在 metadata 库中,然后通过定时任务的方式,每小时以设备的维度,根据物模型,进行数据聚合,将聚合后的数据存储在 statistics 库中。同时为了减少数据存储的压力,将 metadata 的数据过期时间设置为固定时长。

五、改造效果

在与 TDengine 工程师沟通后, 我们只使用了 3 台 4C16G 构成的 TDengine 的集群,就承载了线上的业务。 数据聚合方面,根据 TDengine 的性能、机器配置和前期测试的时间开销,只需很短的时间就完成了全量设备的数据聚合。

CPU 方面,一直很稳定,在常态下 CPU 低于 10%,由于设备的数据聚合需要消耗大量的 CPU,因此在每个整点 CPU 会有所上升,但是不超过 45%的负载。

六、总结

通过一段时间的运行,TDengine 在成本、性能和使用便利性方面相比 OpenTSDB 都有非常大的优势,实现了海量物联数据的高性能、低成本的存储。

在项目实施过程中, TDengine 的工程师提供了专业、及时的帮助,在此表示感谢。希望 TDengine 能够继续提升性能和稳定性,开发出更多的新特性、新功能,实现更大的突破。

相关文章