写入、读取均优于InfluxDB,TDengine在智慧水务系统中的应用

2022-05-26 00:00:00 数据 数据库 时序 联网 设备
作为数研院个自主研发的项目,淮安智慧水务项目需要实现对数十条河道的实时监测和预警,其中包含水质监测箱、液位仪、流量计、雨量计、截流井监测计、水泵等多种设备的数据采集和分析。

高兴之余,也有一个苦恼的事情随之而来——要对如此巨大的数据量进行实时监测和预警、采集和分析,究竟怎样的一个数据库才能支撑呢?我们又该如何进行数据模型设计?

数据库选型重点看什么?

在项目初进行数据库选型时,我们发现水务系统的设备数据具有以下几个特性:

  • 时序性
  • 数据插入后不再修改
  • 每个设备的数据之间独立的
  • 多维度统计功能
很显然,这些都是典型的物联网数据特征,因此我们排除了关系型数据库、NoSQL数据库(如MongoDB、HBase等)的选项,将选型范围缩小在了专为物联网设计的时序数据库。
市面上时序数据库产品众多,在对多款产品进行对比分析后,我们终选择了TDengine,理由如下:
1.性能优异,兼容性强
虽然接入设备繁多,但TDengine兼容性很强,写入、读取和统计效率也大大高于其他数据库,对比InfluxDB来看,测试数据显示如下:
2.接入简单,功能强大
TDengine将数据库、消息队列、缓存、流式计算等功能融合,应用无需再集成Kafka/Redis等软件,大幅降低了开发和维护的复杂度成本,具有学习成本低、接入快速等特点,特别适合我们的新手团队,全员只用了一周时间就掌握了基本的开发流程。
3.开源免费,社区活跃
TDengine是一款的国产软件,在政府类项目中非常有优势。同时,它的技术支持也非常好,社区和微信群很活跃,你甚至可以和开发人员一对一沟通。大家在使用过程中也会积极提供bug信息,为开源贡献一点力量,助力TDengine变得越来越完美。

引入TDengine之后的系统架构

引入TDengine之后,整体的系统架构如下图所示。
我们在各个厂商的云平台、DTU/RTU设备、SCADA系统与TDengine之间搭建了一个数据中间件,用于处理各种协议和接口,初步解决了各类设备的接入问题,后期会考虑自建一个物联网云平台,并接入TDengine集群,对接所有智慧类项目的物联网数据。

搭载TDengine之后的数据模型设计

值得一提的是,在TDengine上进行的数据模型设计也很有亮点。
我们的设备类型包括:液位计、流量计、水质检测箱、雨量计、旧泵站、智慧截流井,下面以“水质检测箱”为例,进行数据结构说明:
注:
位置(location)为河道名称;
监测点(id)为河道上某一处地方;
设备标识(imei)为每款设备的标识。
数据建模时,具体操作如下:
  • 建库语句:

    create database if not exists water update 1;
  • 建超级表语句:
    create table if not exists water.river_meter(ts timestamp, cod float, nh4n float, do float, ss float, ph float, orp float) tags(location nchar(64), id nchar(32));
这里必须要提一下TDengine的一个创新点,即一个采集设备对应一张表,其中动态创建的子表,能够自动关联父表,在保证高效插入采集数据的同时,也更加方便进行后续的查询统计。
以上述案例来说,其每增加一款水质检测箱,建表为:
CREATE TABLE water.river_meter_x_865374056****** USING water.river_meter TAGS ('小南河','865374056******');
在实际业务中的数据建模展示如下:
  • 部分字表——
  • 部分子表数据——
  • 统计location='小南河'的每周水质数据——

总结和期望

从和TDengine合作至今,这一款时序数据库给了我们很多惊喜,我整理了一下有代表性、也是印象为深刻的三点:
  • 超级表和标签的概念非常惊艳,极大提高了聚合统计的效率;
  • 其为每张表在内存中分配了一定的缓存空间,来存储热的记录,在使用last_row进行实时查询时效率非常高;
  • 从大程度考虑到物联网数据的使用场景,其对缓存、消息队列、流式处理、订阅等功能做了封装,业务开发不需要再过多的关注细节了。
此外,作为极为看好的一款数据库,我们对TDengine也抱有更高的期望:
  • 其一是希望能够进一步丰富文档,特别是系统运维方面,不同体量的数据场景能够对应不用的TDengine服务器的配置问题,以及常见的Q&A。
  • 其二是希望改善下报警功能。当下该功能依赖AlertManager,此模块通常不会安装,要实现这个功能只能依靠业务模块自身去订阅TDengine,然后给自身发送告警。下一步规划中建议能将报警信息以回调形式调用接口。
TDengine让我们看到了时序数据库之于物联网时代的重要性,不管是从性能还是成本管控来看,这款专门为物联网设计和研发的时序数据库都是不可多得的数据库产品。尽管还存在优化空间,但瑕不掩瑜,其值得成为数据库选型中的优选对象。
如今淮安智慧水务项目已经顺利验收,无可置疑,TDengine在项目中起到了至关重要的作用,对此我们对所有参与和维护TDengine研发的开发人员和开源贡献者表示感谢,也衷心祝愿TDengine发展越来越好。

来源 https://www.modb.pro/db/168849

相关文章