从四种时序数据库选型中脱颖而出,TDengine在工控领域边缘侧的应用

从四种时序数据库选型中脱颖⽽出,TDengine在⼯控领域边缘侧的应⽤动动网
作者:冰茹
⼩T导读:和利时始创于1993年,业务集中在⼯业⾃动化、交通⾃动化和医疗⼤健康三⼤领域,结合⾃动化与信息化两⽅⾯的技术优势,提出了“智能控制、智慧管理、⾃主可控、安全可信”的战略指导⽅针。围绕集团三⼤业务,公司对⼯业互联⽹、⼤数据、5G、信息安全等新兴技术开展更深⼊的研究和应⽤⽰范,打造⾯向各领域应⽤的⼯业互联⽹平台,进⼀步促进智能制造解决⽅案的落地应⽤。
在物联⽹场景下,⾯对庞⼤的时序数据处理需求,Oracle、PostgreSQL等传统关系型数据库越来越吃⼒。基于此,⽬前国内外主流⼯业互联⽹平台⼏乎都已经采⽤时序数据库,来承接海量涌⼊的⼯业数据。
究其原因,可以从数据的三个核⼼需求来解释。我们都知道,企业在选择数据库、⽂件系统等产品时,最终⽬的都是为了以最佳性价⽐来满⾜数据的三个核⼼需求:数据写⼊、数据读取、数据存储。时序数据库完全是按照时序数据的三个需求特征进⾏设计和开发的,在数据处理上更加具有针对性:
在数据写⼊上,如果将时间看作⼀个主坐标轴,时序数据通常是按照时间顺序抵达,抵达的数据⼏乎总是作为新条⽬被记录,在数据处理操作上95%-99%都是写⼊操作;
在数据读取上,随机位置的单个测量读取、删除操作⼏乎没有,读取和删除都是批量的,从某时间点开始的⼀段时间内读取的数据可能⾮常巨⼤;
在数据存储上,时序数据结构简单,价值随时间推移迅速降低,通常都是通过压缩、移动、删除等⼿段来降低存储成本。
⽽关系型数据库主要应对的数据特点却⼤相径庭:
数据写⼊:⼤多数操作都是DML操作,插⼊、更新、删除等
数据读取:读取逻辑⼀般都⽐较复杂
数据存储:很少压缩,⼀般也不设置数据⽣命周期管理
因此,从数据本质的⾓度⽽⾔,时序数据库(不变性、唯⼀性以及可排序性)和关系型数据库的服务需求完全不同。这也是我们⼀开始就锁定时序数据库来满⾜⼯业互联⽹场景的核⼼原因。
我们对包括InfluxDB、OpenTSDB、HolliTSDB(和利时⾃研时序数据库)、TDengine在内的四款时
序数据库进⾏了选型调研及相关测试。测试数据的频率为1秒钟,数据集包含10000台设备,每台设备有10000条记录,每条数据采集记录包含3个标签字段、2个数据字段、1个时间戳字段。测试对⽐项包括占⽤磁盘空间、百万条数据遍历查询、聚合查询(COUNT、AVG、SUM、MAX、MIN)。测试结果如下所⽰:
占⽤磁盘空间
百万条数据遍历查询垃圾分类机
聚合查询COUNT
聚合查询AVG
聚合查询SUM
聚合查询MAX
聚合查询MIN
同等条件下,TDengine的压缩率最⾼,数据占⽤的存储空间最⼩;在原始数据查询上,OpenTSDB最
慢,TDengine与HolliTSDB在伯仲之间;在聚合查询操作上,TDengine最快,HolliTSDB的速度和InfluxDB相当,OpenTSDB最慢。同时,InfluxDB只能单机部署,集版本并未开源,且查询性能存在瓶颈,其QPS约为30-50。
从性能测试结果来看,我们选择TDengine的原因主要源于以下⼏点:
TDengine在查询性能维度上的表现⾮常优异,满⾜了我们的业务查询需求
集功能开源,⽅便横向扩展,更弹性
在开源热潮之下,⽀持如TDengine⼀般的国产开源数据库、操作系统、中间件等也是企业的必修课
最终我们决定接⼊TDengine,以享受更多元的本地化⽀持和响应。
⽬前TDengine作为边缘版时序数据库在搭建使⽤,具体的技术架构如下图所⽰:
基于TDengine进⾏建库建表思路如下:
CREATE STABLE IF NOT EXISTS ts_super
(time TIMESTAMP, s BIGINT, vl BIGINT,vf DOUBLE,vb BOOL,vs BINARY(16349))
TAGS
(innerId BIGINT, namespace BINARY(256), id BINARY(256), type BINARY(1), seq int);
在构建列时,包含元素为time(时间,主键)、s(数据质量)、vl(整形类型数据L)、vf(浮点型数据F)、vb(布尔型数据B)、vs(字符串数据S),其中time、s是必填的列,剩余列则要根据测点类型填写,⽐如测点上报的是整形数据,就只需要设置time、s、vl这三列,vf、vb、vs这三列为null。
在构建tag时,要包括innerId(测点内部编码)、id(测点id)、type(测点类型,L/F/B/S)、seq (序号,L/F/B类型数据设置为0,S类型测点的seq可能为0,1,)
同时,在建库建表的操作中我们也碰到了⼀些⼩问题,放在这⾥给⼤家做下参考:
因为表名不⽀持特殊字符,所以需要再⽣成⼀个唯⼀编码作为表名;
查询语句会被填充,导致查询过程性能变慢,⽹卡被打满。这种情况下只需要将查询请求⼿动压缩,就能有效降低带宽占⽤率;保温鸡舍
TDengine字符串最长可以有16374字节,超过的话需要从逻辑上处理。我们采⽤的⽅案是如果长度超过16374 ,截取该字符串,同⼀个测点再建新的表,通过tag关联。
1.
TDengine集5个节点,副本数设置为3。修改配置为:
minTablesPerVnode 10
tableIncStepPerVnode 10
compressMsgSize 1024
rpcForceTcp 120kv高压直流电源
httpMaxThreads 16
各节点机器配置如下:
相片冲印
2.
客户端共有三台主机,每台主机上分别运⾏时序查询及其对应的AB,各主机上的时序查询独⽴运⾏,分别启动⼀/⼆/三个时序查询及其对应的AB进⾏性能测试。
3.
共1000个测点,80000万条数据,数据频率为每秒钟1条。存储分布如下所⽰,存储压缩率不超过1/10。
4.
在我们的业务查询当中,增加QPS的主要⽅式是增加查询的并发数。AB从1到2,QPS增加了45%,平均响应时间不超过1000ms,很好满⾜了客户需求
5. 资源消耗(统计3个查询服务的实例
TDengine node节点资源消耗
以会受到请求均匀度的影响。如果TDengine在后续可以做代理层⾯的负载均衡,相信能够缩⼩这个偏差。
6.
在查询段的节点资源消耗还是相当⼤的,因为需要对查询请求和结果进⾏处理。在具体业务中,可以考虑使⽤RPC接⼝来降低查询服务的CPU消耗。
TDengine在本项⽬中展现出的性能效果⾮常显著,推动本次项⽬快速且⾼质量落地,实现降本增效的⽬标。接下来,希望TDengine能够在以下两个⽅向上有更⼤的进步,也祝愿我们的合作能够越来越紧密:
车模门
希望可以通过触发器或协处理器等⽅式,在服务端做数据过滤再返回,解决⽹络压⼒过⼤的问题
希望能够进⼀步改善长度限制的问题
⬇ 点击下⽅图⽚查看活动详情,把iPhone 13 Pro带回家!

本文发布于:2024-09-22 12:36:33,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/142609.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   查询   数据库   时序   读取
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议