物联网数据处理涉及到大量的设备和传感器收集的数据,这些数据都具有典型的时序数据特征,具备数据量大、结构化等特点。对于很多物联网平台来说,创建之初在数据架构的搭建上大多选择了较为成熟和流行的关系型数据库或其他通用数据库,但随着设备数的增加、时序数据的爆发式增长,原本的数据架构面临运维难、开发难、成本高等问题。为了帮助企业找到物联网场景下数据架构的最佳改造手段,本文汇总了四个典型的物联网平台的实践经验,把它们曾面临的数据难题以及解决思路分享给大家。
至数摇光 x TDengine
“目前改造工作已经全部完成,改造后有大约 80% 左右的指标模型放到了 TDengine 中,20% 左右的主数据或维表数据存放在 MySQL 数据库中。相较于改造前的 80% 指标模型存放在 MySQL 中,20% 指标数据存放在 OpenTSDB 数据库中,结果刚好进行了颠倒,服务器资源使用情况也有所下降。应用整体的页面影响速度显著提高,数据模型及数据指标上也可以更加地灵活多变。”
业务背景
至数物联网平台场景多、数据模型复杂,改造前数据库采用 OpenTSDB+MySQL 结合的方式实现,由于 OpenTSDB 无法满足复杂查询场景,因此 80% 的场景指标只能基于 MySQL 数据库来实现,这样带来的问题就是 MySQL 数据库的数据增长迅速,需要定时做冷热数据分离及数据库表维护动作。在对 TDengine 进行充分调研后,至数摇光决定从时序数据库 OpenTSDB 迁移到 TDengine,并基于 TDengine 的特性对系统进行彻底性的改造。
架构图
华自科技 x TDengine
“当前项目数据测点大概在 18 万左右,改造后数据存储周期由原来的 5 分钟减少到 1 秒钟,存储的数据维度更精细了,能为平台的智能诊断、智能分析服务提供更准确的数据支持,同时各业务场景下的计算查询性能也提升了不少,数据库服务器由原来的 6 台减少到目前的 3 个节点集群。”
业务背景
华自科技旗下的物联网数据平台是电站及泵站智慧运维平台的核心组成。在数据存储上,此前其采用 MySQL 分库分表方案来存储历史数据,使用 Redis 来存储实时数据,在测点数较少或者集控需求不是很多的场景下,基本满足需求,但随着平台业务的发展,接入的站点越来越多,运维难、开发难、成本高等问题逐渐凸显。为了解决这些问题,华自科技决定重新进行技术选型,寻找替代方案,升级目前数据库存储方案。结合平台实际需要,其调研了 InfluxDB、庚顿、麦杰、TimescaleDB、TDengine 这几款数据库产品,最终选择了 TDengine。
改造迁移
由于 TDengine 采用了类 SQL 的语法,支持 MyBatis 等 ORM 框架,因此老业务在代码层面的改动非常少,改动最多的就是将原来的 MySQL 函数结合应用代码的一些计算逻辑直接用 TDengine 的函数替换掉。在通过业务系统观察和验证各项功能正常之后,就可以进行历史数据的迁移了。由于 TDengine 的表结构与原来的 MySQL 存储结构基本类似,因此物联网数据平台开发人员直接采用 DataX 的 TDengine 插件,历史数据就很轻松地迁移过来了。
睿信物联网平台 x TDengine
“TDengine 的安装部署非常简单,配合 Docker 容器,在几分钟内就能完成。迁移到 TDengine 之后,我们的运营监控工作也变简单了,只需要对 TDengine 的几个进程进行监控,占用的磁盘空间减少到了原来的 1/5,使用的主机也减少到原来的 1/5,极大节省了资源开销。遇到技术难题,不仅可以直接在官方渠道 https://github.com/taosdata/TDengine 提 issue,也可以在 TDengine 的技术社区提问,TDengine 的技术专家响应非常快。”
业务背景
睿信物联网平台此前采用 OpenTSDB 进行时序数据的存储,功能上基本满足现有需求,但是由于 OpenTSDB 架构复杂,体量过重,给开发测试、安装部署以及运维管理等工作带来了不小的麻烦。随着业务的发展,问题逐渐凸显,开始影响工作效率,具体可以归纳为安装难、调试难、运维难、成本高四大问题。从业务发展的角度出发,睿信开发人员决定重新进行技术选型,寻找 OpenTSDB 的替代方案,分别对 InfluxDB、TimescaleDB 和 TDengine 三款时序数据库进行调研。
架构图
苍穹数码 x TDengine
“我们以近 10 年全省的雨量站小时雨量数据为测试数据,从常用的应用场景对 TimescaleDB 和 TDengine 两款数据库进行对比分析,历史数据批量入库场景中 TimescaleDB 用时 24 小时,TDengine 用时仅仅 2 小时;入库后数据文件大小对比结果中 TimescaleDB 是 38GB,TDengine 是 698MB;常见查询场景比对中 TDengine 也均优于 TimescaleDB。从入库、压缩比及查询 3 个维度来看,TDengine 都是完胜。”
业务背景
在地灾专业监测物联网平台项目中,首先需要解决的就是海量时序数据的存储和计算问题,其有着体量大、时间长,写入、查询要求高等特点,传统关系型数据库已经无法满足实时写入与高性能查询要求。该项目在 2018 年创建之初采用的是大型企业级数据库 Oracle,目前已经无法满足实时写入与高性能查询要求,特别是当雨季来临,传感器数据采集频率提高到秒级、毫秒级别,数据入库就会阻塞,效率非常低下。苍穹数码选择接入 TDengine 以解决海量时序数据的存储和计算问题。
架构图
通过上面几个实践我们也能看到,时序数据积累得非常快,每秒产生数百万条数据,通用数据库并不是为处理这种规模的数据而设计的——关系数据库在非常大的数据集上表现很差,NoSQL 数据库虽然解决了扩展能力,但是其通用的数据组织方式并不完全适用于对时序数据存储和查询需求,用户必须根据实际应用场景,进行特殊设计甚至大量数据冗余存储才能较好的利用资源处理请求。
而在时序数据库(Time Series Database)的选择上,企业也要擦亮双眼,进行充分的调研测试,选择性能最好资源使用率最高的产品,此前我们基于第三方性能基准测试平台 TSBS 测试发布的 IoT 场景下 TDengine 3.0 性能对比分析报告,大家也可做参考。如果你正面临数据处理难题,欢迎添加小T微信(tdengine)寻求帮助。
了解更多 TDengine Database的具体细节,可在GitHub上查看相关源代码。