共计 2790 个字符,预计需要花费 7 分钟才能阅读完成。
小 T 导读:在拓斯达的智能工厂整体解决方案我的项目中,传统的关系型数据库曾经无奈高效解决时序数据,在加载、存储和查问等多个方面都遇到了挑战,最终他们抉择了 TDengine 来匹配工业传感器数据的利用剖析场景。本文将讲述他们利用 TDengine 的具体实际。
企业简介
广东拓斯达科技股份有限公司(简称:拓斯达,股票代码:300607)是广东省首家登陆创业板的机器人骨干企业。拓斯达保持“让工业制作更美妙”的企业使命,通过以工业机器人、注塑机、CNC 为外围的智能配备,以及管制、伺服、视觉三大核心技术,打造以核心技术驱动的智能硬件平台,为制作企业提供智能工厂整体解决方案。
我的项目介绍
在工业畛域,生产、测试、运行阶段都可能会产生大量带有工夫戳的传感器数据,这都属于典型的时序数据。时序数据次要由各类型实时监测、查看与剖析设施所采集或产生,波及制作、电力、化工、工程作业等多个行业,具备写多读少、量十分大等典型个性。
在咱们的业务中,传统的关系型数据库(Relational Database)曾经无奈高效解决时序数据,在加载、存储和查问等多个方面都遇到了挑战。次要问题能够汇总如下:
- 写入吞吐低:单机写入吞吐量低,很难满足时序数据千万级的写入压力;
- 存储老本大:在对时序数据进行压缩时性能不佳,需占用大量机器资源;
- 保护老本高:单机零碎,须要在下层人工进行分库分表,保护老本高;
- 查问性能差:海量实时数据的聚合剖析性能差。
为了更好地满足时序数据的解决需要,咱们决定进行数据库选型调研,最终抉择了时序数据库(Time-Series Database)TDengine。事实证明,TDengine 针对时序数据的写入、存储、索引、查问等方面都进行了特定的优化,从而实现了更优的数据加载、数据压缩、查问写入性能,十分匹配工业传感器数据的利用剖析场景。
抉择 TDengine 的理由
与通用数据库相比,TDengine 的压缩率体现惊人,外围起因是其采纳列式存储,而且采纳了二阶段压缩策略,还针对不同数据类型采取了不同的压缩算法,这种压缩机制使其压缩率远超其余数据库。
此外 TDengine 还领有极高的读写性能,并且读写速度受数据存储规模的影响微不足道,要晓得通用数据库的数据量一旦过百万级,读写速度就会有显著降落,之前咱们做过一次 MySQL 批量插入数据的测试,性能差距显著,这也是在大量级数据存储下咱们会抉择 TDengine 的重要起因之一。 具体来说,TDengine 劣势如下:
- 数据的读写速度快且自带工夫戳,应用 SQL 进行数据库操作,简略易学,反对简单查问
- 数据压缩率高,大量级的数据也不会占据过多存储空间,可导出数据进行备份
- 领有交换社区和交换群,遇见问题能够和 TDengine 的其余使用者一起探讨,而且官网的同学也能提供及时的帮忙
当然,世上没有完满的数据库,咱们在利用之后总结出了两点待改良的中央:
- 无奈应用可视化软件如 Navicat 等进行数据库操作(TDengine GUI)
- 目前还没有 Windows 版的服务端,像咱们上一个客户,只在本地 Windows 上应用程序,在没有装置虚拟机和部署到服务器的状况下,就无奈部署 TDengine
但每一款产品都是在发现问题和改良问题的步调中逐步提高的,而且对于咱们的业务实现来说,TDengine 不存在显著的短板。没有最优的数据库,在场景匹配的状况下,咱们最终采纳了 TDengine。
落地实际
平台架构
咱们是通过网关采集设施数据推送到 MQTT,Java 后端监听到后会写入 TDengine,在后端按需要查询处理后再把数据返回给前端。
具体来说,网关会先读取后盾公布的上行规定,在采集到设施数据后,应用上行规定对数据进行解决计算后再将后果返回给上行规定模块,后盾监听到后,会连贯 TDengine 进行数据库表的创立批改和数据写入。之前在云平台咱们应用过 Kafka 进行数据的公布订阅,当初所有环境都改为 MQTT 了。
超级表及建模思路
在利用 TDengine 时,咱们建设了流水数据库“iot_platform”用来存储网关传来的数据,便于日后查问应用。咱们遵循“一个采集点一张表,一类数据一个超级表”的思路来建表,在具体实际上设计了两张超级表,一张是用于存储 log 指令内容的“logs”表,另一张是用于存储其它指令内容的“datas”表,数据类型根本为电流电压、设施状态等。在进行数据存储时首先会对数据加以判断,再决定将数据存储到哪张表里。
落地成果
运行一段时间后,TDengine 的查问、写入速度齐全能够满足咱们目前的客户需要,最慢的分钟级,最快的能达到 1 秒一条; 一个设施一天最多能写入近十万条数据,近千个设施同时写入也齐全没有问题,相较于之前,写入速度晋升了数十倍。查问数据在以月为单位的工夫范畴内没有过于显著的提早,整体的数据压缩比大略是 1 /10,目前每天产生的数据量在数 G 左右。
流水数据查问
查问某一时间段内的流水数据,应用查问语句:
SELECT datagettime as ts , ${dataName} as data FROM ${tableName}
<where>
uuid = ${uuid}
<if test="startTime != null">
and datagettime > #{startTime}
</if>
<if test="endTime != null">
and #{endTime} > datagettime
</if>
and ${dataName} is not null
</where>
limit 0, ${countLimit}
聚合函数计算一天的数据
select diff(${dataName}) as data
from ${tableName}
where ${dataName} > 0
and datagettime > #{startTime}
and #{endTime} >= datagettime
计算某一时间段内的数据
select ${method}(${dataName}) as data
from ${tableName}
where uuid = ${uuid}
and datagettime > #{startTime}
and #{endTime} > datagettime;
写在最初
在工业互联网疾速倒退的大背景下,工业生产现场投放了大量的设施传感器和监控零碎,二者提供的实时数据可能反映设施的状态和生产的进度,其中的大多数据都是依照工夫程序造成的实时数据,这些海量实时数据有着多样化的剖析需要和重要的参考价值。
将来心愿 TDengine 能够提供更简单的流式计算、查问剖析以及监测预警等能力,能够为产品的可视化运维、预测性保护、近程智能治理等方面提供数据根据,从而升高人员、工夫等老本,减速工业化与信息化的深度交融,促成简单重型配备制造业的转型降级,产生社会经济效益。
想理解更多 TDengine Database 的具体细节,欢送大家在 GitHub 上查看相干源代码。