TDengine在数益工联工业物联采集平台建设中的初步实践
作者:易永耀 夏杭泰 邓炜兴
公司介绍
数益工联致力于打造基于数据流+价值流的离散制造业数字化软件;应用新一代的物联网技术与丰富的现场交互手段,融合工业工程精益思想,为离散制造业客户的数字化升级提供从规划到实施落地的端到端工厂级解决方案;打造行业与客户的工业数据平台,持续提供数据智能服务。核心团队来自清华大学等知名院校,同时拥有深厚的制造业精益运营管理能力和丰富的数字化工厂成功经验。团队以IE+IT为核心能力,实现产品和技术的双轮驱动,旨在服务离散制造业客户通过数字化显著改善质量管理水平、提升企业生产效率、降低制造成本。
业务场景
工业设备物联采集是数字化工厂建设的基础,设备在运行过程中会产生大量有价值的数据,例如:设备状态、实时工艺参数、合格报废数量、生产节拍、异常报警信息等,设备物联采集可以为后续的数据分析挖掘提供最基础、透明、可靠的数据来源。
目前我们的客户,其设备的主要特点是:
- 设备类型繁多,不同类设备的通讯接口、采集协议、采集参数各不相同
- 单个工厂的设备数量:几十至几千
- 单台设备的采集参数数量:几十至几百
- 采集频次的基本要求:每秒采集一次,支持变化上报
- 参数类型包含:数值、文本
我们对自研工业物联采集平台的定位是:可对物联数据进行采集、存储和查询,可用于单个工厂或多个工厂的设备物联采集。
需要支持的特性:
- 功能稳定
- 高效的数据写入
- 高效的数据查询,包括最新数据和历史数据
- 可云化部署
- 可私有化部署
- 线性扩展
- 高可用
- 便于连接大数据平台
不需要支持的特性:
- 修改/删除数据
- 数据分析
技术选型
基于业务场景的需求,我们选择时序数据库作为物联采集平台的核心组件,并调研了几款产品:InfluxDB、OpenTSDB和TDengine。
- InfluxDB:应用最广泛,稳定性高。劣势是集群版不开源,需要付费,性能不突出。
- OpenTSDB:基于HBase,扩容方便。劣势是压缩比较低,存储空间大。
- TDengine:性能强大,部署简单,集群版已开源,社区活跃,国内产品。超级表的设计,与设备类型的概念完美契合,聚合查询非常方便。劣势是推出时间较短,产品比较年轻。
对比之后,我们最终选择了TDengine这款性能出众、潜力巨大的产品。通过充分的测试和验证,可以弥补劣势。
技术架构
我们使用TDengine存储两类数据:
- 原始的设备物联数据。同类设备使用同一个超级表。
- 与业务有关联的设备物联数据,经处理后再存入。同类业务使用同一个超级表。
物联采集相关的架构如下:

工控机是设备与物联采集平台之间的重要枢纽,根据设备管理模块下发的配置,将各类设备的物联数据转化为统一的格式,加密后上报给物联采集平台。
物联采集平台接收到数据后,根据数据类型进行分发。原始数据直接存入TDengine;部分类型的数据推送到Kafka或者是RabbitMQ中,经业务处理后再存入TDengine。
使用体验
TDengine的写入和查询的效率非常高,平均在10ms以内,性能完全满足我们的要求。给人印象最深刻的是超强的数据压缩能力,以某个客户的数据情况为例:运行一个月时间,产生约3.2亿条记录的数据,每条记录包含约800列,实际占用的磁盘空间竟然不到30G。


问题解决
在使用过程中,也遇到过些许问题,例如部分数据在超级表中可以正常查询到,但是无法通过子表查询到。
我们联系了涛思数据的技术支持,涛思很快就协调了开发资源进行问题排查,甚至是通宵处理,最终定位到了原因:我们通过连接池的方式连接TDengine,并进行较为频繁的show tables操作,以测试连接是否正常,该频繁操作最终触发TDengine内部的异常。发布新版本后该问题得到解决,我们也减少了不必要的show tables操作。
非常感谢涛思数据的工程师,非常热诚,及时高效地帮助我们解决了问题!
未来期望
TDengine是个年轻又充满活力的产品,在工业物联领域具有非常大的价值。
希望涛思数据在未来可以推出更友好的开发和运维工具,也非常希望能在开源社区推出一个相对稳定、兼容性较好的版本。
TDengine在数益工联工业物联采集平台建设中的初步实践的更多相关文章
- 以软件定义物联网芯片,以技术融合推动LPWAN2.0泛在物联
作为数字化产业重要的基础设施之一,物联网迎来了黄金发展期.物联网通信技术通过数据的采集.分析.输出,从浅层次的互联工具和产品深化,到成为重塑生产组织方式的基础设施和关键要素,正深刻地改变着传统产业形态 ...
- 物联仓储系统ZigBee组网原理
在嵌入式项目物联仓储系统中,使用cortexM0模拟仓库,cortex-A9模拟服务器,两块开发板之间使用ZigBee技术实现数据接收和发送,本文就介绍一下ZigBee组网的原理和相关步骤. 1.组网 ...
- 关于蜂窝物联技术 NBIoT 的一些观点
背景 SigFox 开始于2009,这项技术对长期作为标准移动电话交互标准的3GPP造成了有力冲击.SigFox 解决了终端设备互联场景下的多个痛点: 1 过于复杂: 2 昂贵的设备: 3 耗电不持久 ...
- [视频]物联网&集成系统中的物联交互、数据存储、效果展示形成快速解决方案。附:ServerSuperIO 3.6.2 版本发布。
ServerSuperIO v3.6.2版本更新内容: 设备驱动与实时库对接的Tag配置与OPC Client读取数据的配置统一用一个配置文件. 设备驱动继承DeviceDynamic接口的子类支持存 ...
- Arduino上传数据至贝壳物联并与FPGA进行交互
本篇实现Arduino与FPGA交互,当然也没有什么新的协议,还是基于串口通讯,现在学一个串口通信基本上可以驱动大多数模块了,而且和各种单片机无缝数据交互,Arduino由于其强大的库函数支持,在实现 ...
- 国内物联网平台(3):QQ物联智能硬件开放平台
国内物联网平台(3)——QQ物联·智能硬件开放平台 马智 平台定位 将QQ帐号体系.好友关系链.QQ消息通道及音视频服务等核心能力提供给可穿戴设备.智能家居.智能车载.传统硬件等领域的合作伙伴,实现用 ...
- 国内物联网平台初探(三) ——QQ物联·智能硬件开放平台
平台定位 将QQ帐号体系.好友关系链.QQ消息通道及音视频服务等核心能力提供给可穿戴设备.智能家居.智能车载.传统硬件等领域的合作伙伴,实现用户与设备.设备与设备.设备与服务之间的联动. 实现用户与设 ...
- 5、qq物联开发步骤
1.QQ物联开发步骤 1)测试环境无需申请上线,即可任意调试.意思是什么呢,它是告诉大家,在调试的时候不要点击上面的提交上线,因为目还在调试此设备,一旦上线,QQ物联官方就会来审核你的设备,导致延长研 ...
- 4、qq物联SDK介绍及实例讲解
1.到QQ物联官网http://iot.open.qq.com中下载软件SDK S3C2440_20161122_1.6.205_r4288.tar.gz注意:在后续大家实际开发过程中,可能你会下载到 ...
随机推荐
- Identity基于角色的访问授权
详情访问官方文档 例如,以下代码将访问权限限制为属于角色成员的用户的任何操作 AdministrationController Administrator : [Authorize(Roles = & ...
- Vue Abp vNext用户登录(Cookie)
因为Abp vNext没找到Vue的模板,网上也没找到相关vNext的例子,只能自己试着写写,asp.net core abp vue都是刚学不久,所以很粗糙也可能有错误的地方,如果您看到请指正,谢谢 ...
- BeanFactory和ApplicationContext对比
一.BeanFactory和ApplicationContext对比 其中,ApplicationContext容器即时加载,就是一加载配置文件,就会创建对象,且自动装配bean(即写道xml中bea ...
- git 提交本地项目
在新文件夹中] 1.右键 git bash here,执行 2.git init 生成.git文件,存在则跳过 依次执行 1.git add . 2.git commit -m "提交信息& ...
- python库--sklearn--流程图
- 如何解决浮动元素高度塌陷---CSS
解决高度塌陷问题的方法: 方法一. //给父元素添加声明 overflow:hidden; 缺点:回隐藏溢出的元素: 方法二. 在浮动的元素下添加空div标签,并给该元素添加声明: clear:bot ...
- Set代码
现有一整数集(允许有重复元素),初始为空.我们定义如下操作:add x 把 x 加入集合del x 把集合中所有与 x 相等的元素删除ask x 对集合中元素x的情况询问 对每种操作,我们要求进行如下 ...
- POJ——3278 Catch That Cow(BFS队列)
相比于POJ2251的三维BFS,这道题做法思路完全相同且过程更加简单,也不需要用结构体,check只要判断vis和左右边界的越界情况就OK. 记得清空队列,其他没什么好说的. #include< ...
- 手把手教你实现栈以及C#中Stack源码分析
定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作. 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈), ...
- 【TP3.2.3】addAll方法的坑
问题:做一个导入Excel到数据库的功能中需要用到addAll功能,但是每次执行到addAll()时都会报错,如下 Insert value list does not match column li ...