TDengine加持,一周时间上线环保监测平台

2022-03-22 00:00:00 数据 数据库 采集 计算 聚合

程序设计

整个数据采集服务基于MQTT协议开发,通过阿里巴巴的nacos集群实现配置和服务发现,通过feign模式调用其他微服务模块的业务数据,来对上报的数据进行业务解析,并将解析的结果存入对应监控指标对应的点位表中。采集服务采用mybatis-plus的多数据源配置,使用的是目前性能佳的HikariCP数据连接池,分别配置MySQL和TDengine两个数据库连接,实现了多数据源的无缝切换。整个采集服务基于容器化部署,采用Kubernetes进行容器编排,通过分布式锁方式避免了数据重复入库,提高了数据的解析速度,实现MQTT的分布式分组采集。

数据库选型

我们公司对比了阿里的时序时空数据库TSDB、传统的 MySQL 以及 TDengine。

与传统数据库对比

  • MySQL :查询效率低,需要按数据时间分库分表,应用场景不合适,没有基于采集频率周期的高效查询。
  • TDengine :查询效率高,不需要分表,具备时间维度聚合、流式计算、缓存等特性。

与其他时序库对比

  • 阿里TSDB :闭源,私有化落地比较难
  • TDengine :性价比高,开源,支持云端和本地部署

尤其是TDengine一张设备一张表的建表思路,和我们的程序设计方式非常契合。同时TDengine还有一个超级表的设计,可以给不同的设备打上标签,比如客户ID、设备ID、指标名称等等,管理多条时间线变得非常方便。整个数据库也是SQL交互方式,支持标准JDBC接口,可以无缝对接MyBastis ORM框架,开发起来非常方便。因此我们终选用了TDengine云服务作为各项监控指标的存储数据库,并且花了大概一周时间就上线了系统。

建表思路

我们目前是通过超级表的模式来进行数据建表,我们子表是point_#{采集点编码} 。标签对应为客户标识、设备标识、采集指标编号、指标名称、计量单位名称。

建立超级表

create table point(ts timestamp,val float,flag bool) tags(cusid bigint, devid bigint, code bigint, pointname binary(20),unitname binary(20));

相关文章