锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

写入速度提升数十倍,TDengine 在拓斯达智能工厂解决方案上的应用

时间:2022-07-11 02:00:00 伺服注塑机压力传感器

小 T 导读:在拓斯达的智能工厂整体解决方案项目中,传统的关系型数据库已经无法高效处理时序数据,在加载、存储和查询等多个方面都遇到了挑战,最终他们选择了 TDengine 匹配工业传感器数据的应用分析场景。本文将讲述他们的应用 TDengine 的具体实践。

企业简介

广东拓斯达科技有限公司(以下简称拓斯达,股票代码:300607)是广东省首家登陆创业板的机器人骨干企业。通过工业机器人、注塑机、CNC为核心智能设备、控制、伺服、视觉三大核心技术,打造核心技术驱动的智能硬件平台,为制造商提供智能工厂的整体解决方案。

项目介绍

在工业领域,在生产、测试和运行阶段可能会产生大量带有时间戳的传感器数据,这是典型的时间数据。时间序列数据主要由各种实时监控、检查和分析设备收集或生成,涉及制造、电力、化工、工程操作等行业,具有写作多、阅读少、数量大等典型特点。

在我们的业务中,传统的关系数据库(Relational Database)时法有效处理时间数据,在加载、存储和查询等方面遇到了挑战。主要问题可总结如下:

  • 吞吐量低:单机吞吐量低,难以满足数千万时序数据的写入压力;
  • 存储成本高:压缩时序数据性能差,需要占用大量机器资源;
  • 维护成本高:单机系统需在上层人工分库分表,维护成本高;
  • 查询性能差:海量实时数据聚合分析性能差。

为了更好地满足时序数据的处理需求,我们决定对数据库进行选研究,最终选择时序数据库(Time-Series Database)TDengine。事实证明,TDengine 对编写、存储、索引、查询等方面进行了特定的优化,实现了更好的数据加载、数据压缩和查询性能,与工业传感器数据的应用分析场景非常匹配。

选择 TDengine 的理由

与通用数据库相比,TDengine 的压缩率令人惊叹。其核心原因是它采用了列存储和第二阶段压缩策略。它还采用了不同类型的压缩算法,使其压缩率远远超过其他数据库。

此外 TDengine 还具有很高的读写性能,读写速度受数据存储规模的影响很小。你知道,一旦一般数据库的数据量超过100万,读写速度就会显著下降。我们以前做过一次 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 秒;一天最多的设备写入近10万个数据,同时写入近1000个设备与以前相比,写入速度提高了几十倍以月查询数据单位的时间范围不太明显延迟整体数据压缩比大概是1/10,目前每天产生的数据量G左右

  • 流水数据查询

查询一段时间内的流水数据,使用查询句:

SELECT datagettime as ts ,${dataName} as data FROM ${tableName}     uuid = ${uuid}            and datagettime > #{startTime}                and #{endTime} > datagettime        and ${dataName} is not null  limit 0,${countLimit}
  • 聚合函数计算一天的数据

使用 TDengine 函数计算日用电量,然后每天计算月和年数据,查询句为:

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上查看相关源代码。

相关文章