TDengine在设备管理系统中应用

简介: 这篇文章介绍了TDengine时序数据库在设备管理系统中的应用,包括处理大规模数据插入、查询优化以及如何通过超级表管理多设备数据的具体实践。

背景:

公司之前接了一个关于设备管理的项目,设备是用来控制和记录加油站的油气回收设备状态,以往的设备故障需要加油站的工作人员主动联系人工到现场,根据当前温度天气以及其他异常对设备进行参数调整或者更换油膜,现在要通过系统远程控制调整设备的各种阈值,并实时记录设备运行状态以及各方面的数据。设备在全国大概有2000台,每30秒钟每个设备会产生13条数据要存到数据库,作为历史记录和展示看板,但是普通的SQL承受不了如此庞大的插入,即使可以支持插入,后期的查询庞大的数据也会变得非常慢,另一方面数据量的大小也是一个不可避免的问题,而TDengine数据库也可以支持海量数据的快速查询。且TDengie支持配置过期数据,这样就可以再数据有效期后自动删除不再使用的数据,然后就引入了TDengine时序数据库。

项目介绍:

TDengie的性能非常强悍,而且不像redis那样是非结构化的数据,TDengine是结构化数据,且支持标准的SQL语句进行插入和查询操作,另外TDengine自带时间戳非常适合设备类的数据采集场景,读写能力非常快,达到千万级,虽然修改能力差,但是刚好设备采集的场景本就不会用到修改的操作。因此引入TDengine作为数据采集的数据库就非常恰到好处了。最后,结合项目的其他应用场景,整个项目的大概的业务逻辑如图:

超级表介绍:

为了能更好的使用TDengine,发挥它的性能,然后又重新再学写了下TDengine的知:时序数据库最大的特点是默认就用时间作为唯一ID,也就是同一时间一个普通表只允许插入一条数据,如果插入同一个时间的数据,数据库只会保留一条,这样也同时避免了问题数据,但是那么多台设备会在同一时间插入数据怎么办呢,TDengine非常nice的就是加了超级表这个概念,超级表简直是为了这种情况而生的:创建超级表的时候会生成表的格式,然后通过Tag添加这个超级表下的子表,不同的设备就可以用不同的Tag表示,每个设备对应类型的数据会插入到超级表中的某个子表中,而子表与子表中间就通过Tag区别,Tag就可以设置为设备ID,举个例子就类似java程序中,超级表就代表Class,而子表就是通过Class创建出来的实例,那么每个实例是独立的却又都依赖于超级表,每个实例之间的数据也可以独立的插入和删除而不会互相影响。这样就完美的解决了三个问题:

  1. 多个设备大量插入数据,且时间相同,会是同时插入;
  2. 如果因为程序或者设备问题插入相同时间,相同内容的数据,导致统计结果有误;
  3. 后期的海量数据需要快速读取问题;

这样的设计好处是,同类型的数据会放在一个超级表中,却不是放在同一个子表中,不仅增加了查询效率,在针对某个设备进行查询的时候也会变得更加快速和便捷,且可以把同类数据一起管理,降低了后续的维护成本。

Springboot中,propities配置信息如下:

spring.datasource.tdengine-server.jdbc-url=jdbc:TAOS://110.110.110.110:6030/td?timezone=GMT%2b8
spring.datasource.tdengine-server.username=root
spring.datasource.tdengine-server.password=123456
spring.datasource.tdengine-server.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.tdengine-server.minimum-idle=10
spring.datasource.tdengine-server.maximum-pool-size=150
spring.datasource.tdengine-server.auto-commit=true
spring.datasource.tdengine-server.idle-timeout=30000
spring.datasource.tdengine-server.pool-name=TDengineDruidCP
spring.datasource.tdengine-server.max-lifetime=1800000
spring.datasource.tdengine-server.connection-timeout=30000
spring.datasource.tdengine-server.connection-test-query= show tables
AI 代码解读

创建超级表和子表示例:

-- 创建超级表
CREATE STABLE super_table_name (
    ts TIMESTAMP,
    sensor_id INT,
    value DOUBLE
) TAGS (location NCHAR(50));

--创建子表
CREATE TABLE child_table_name USING super_table_name TAGS ('location1');

--插入数据到子表
INSERT INTO child_table_name (ts, sensor_id, value) VALUES ('2024-09-11 10:30:00', 123, 45.6);
AI 代码解读

mybaits中,给超级表中子表插入数据的例子,需要传入子表的tag,

<insert id="insert" parameterType="com.ags.meper.examples.entity.tdengine.QiTing" >
    insert into ${tableName} USING twice_qiting TAGS(#{userid}) values (#{jksj},#{jyjid},#{jyqid},#{czlx},#{czlxsj},#{jssj},#{id})
</insert>
AI 代码解读

超级表与子表的示意图:

ps: 安装 TDengine的时候服务端可客户端的版本尽量一致,以避免出现不兼容问题。
避免出现不同设备往一个子表中写入数据的情况

相关文章
MES系统跟车间设备怎么连接?设备管理后的好处有哪些?
万界星空科技MES系统通过直接联网通信、工业网关采集和远程IO采集三种方式与车间设备连接,实现设备状态实时监控、统一管理、异常报警、故障记录和预防性维护。设备联网能提升生产效率,降低生产成本,推动数字化工厂建设。
265 2
离线云监测系统OCMS软件
OCMS 是什么? OCMS ( Offline Cloud Monitoring System)是利用人们熟知的稳定可靠的第三方电子邮件、FTP 服务商提供的数据永久存储服务作为中间环节,监测设备向服务器发送数据,监测软件从服务器获取数据的以非实时在线的方式工作的无线监测预警系统。 具有数据可靠、部署快捷、操作简单、无需在线等主要优势和特点。
离线云监测系统OCMS软件
MES系统的实时数据采集和监控功能具体如何实现?
MES系统(制造执行系统)通过与PLC、SCADA系统集成,加装传感器和使用物联网技术,结合条码与RFID技术、图像识别、云计算等手段,实现生产过程的全面实时数据采集和监控,确保数据的实时性和准确性,支持生产优化和决策。
141 6
电脑监控软件中的NoSQL数据库管理
这篇文章介绍了在电脑监控软件中使用NoSQL数据库管理非结构化数据。通过Python示例展示了如何使用MongoDB客户端连接数据库、插入单条或多条数据、查询数据(包括所有、特定用户和时间范围)、更新数据以及删除数据。此外,还提供了一个简单的数据监控和自动提交到网站的脚本,以每分钟检查一次新活动并发送到指定URL。这些示例有助于理解和优化监控软件中的数据处理。
103 3
「直播回放」使用 PLC + OPC + TDengine,快速搭建烟草生产监测系统
本文以 TDengine Cloud 为例,介绍如何使用 PLC + OPC + TDengine 快速搭建烟草生产监测系统。
155 0
TDengine极简实战:从采集到入库,从前端到后端,体验物联网设备数据流转
TDengine极简实战:从采集到入库,从前端到后端,体验物联网设备数据流转
1371 1
设备管理系统厂商 设备管理系统定制开发
随着设备在企业中数量的增大,很多企业发现用传统的人工管理模式已经不能适应时代的需求,因此很多企业开始引进设备管理软件对企业的设备进行全方位的管理,这其中有一些企业使用了软件市场上可以买到的设备管理软件进行管理,另一些企业则觉得这样的软件不适用于自己的企业,那么本文笔者就来对定制设备管理软件以及非定制设备管理软件进行介绍。
设备管理系统厂商 设备管理系统定制开发

相关课程

更多