关于tdengine:格创东智选择-TDengine实现海量数据实时全生命周期管理

111次阅读

共计 4497 个字符,预计需要花费 12 分钟才能阅读完成。

作者:唐时涛

小 T 导读:格创东智科技有限公司成立于 2018 年,孵化于中国 500 强企业 TCL,是我国出名的工业互联网平台服务商。公司依靠 TCL 团体 40 年工业场景和制作基因积淀,基于“面向工业现场”的研发方向和“连贯、协同、共享”的倒退理念,深度交融人工智能、大数据、云计算、物联网等前沿技术,打造了新一代具备自主知识产权的工业互联网平台——” 东智工业利用智能平台 ”。

作为东智工业利用智能平台产品家族的物联网平台,G-Things 为工业设施提供了安全可靠的连贯通信能力,其反对数据采集、规定引擎、数据转发、指令下发、数据可视化,同时提供凋谢的 API 与第三方零碎疾速对接,为工业企业提供高效率、低成本、高牢靠的工业物联网解决方案。

从采集的数据类型上来看,平台采集的设施数据以及零碎业务次要有以下时序数据个性:

  • 设施所有采集的数据是时序性的、结构化的
  • 设施采集点的数据源是惟一的
  • 数据存在时效性
  • 以写操作为主,读操作为辅
  • 须要统计、聚合的实时计算操作
  • 数据的查问个别指定工夫区间
  • 反对高频数据接入

为了让用户在最大水平上实现降本增效,G-Things 在接入不同的租户时,会从用户类型(轻量级、重量级等)、设施规模、设施采集的数据量等角度帮忙用户抉择适配正当的时序数据长久化落地计划。

一、时序数据库选型调研

自 2019 年咱们便开始关注一些国内的数据库,通过调研发现 TDengine 很适宜咱们的业务场景,它领有读写性能弱小、部署简略、超强的数据压缩比等个性,同时超级表、子表的标签 tag 设计也很好地符合了平台物模型中的设施模型、设施概念。

为了验证 TDengine 在读写、存储等方面的性能,咱们将其与 Cassandra、OpenTSDB 在同等条件之下进行了相干的读写性能比照测试,测试后果如下:

在等同数据集和硬件环境下,比照发现:

TDengine 的性能远超 Cassandra 和 OpenTSDB,写入性能别离是两者的近 20 倍、25 倍,读取性能约为 17 倍、32 倍,聚合函数性能约为 4000 倍、1000 倍,按标签分组查问性能约为 2500 倍、1000 倍,按工夫分组查问性能约为 119 倍、40 倍,压缩比约为 26 倍、5 倍。

基于此,TDengine 在选型中怀才不遇。

二、技术架构与具体实际

具体到理论业务中,咱们应用 TDengine 次要存储以下三种类型的数据:

  • 租户设施上抛的原始数据。通过实时计算解决后保留,租户彼此之间数据隔离,一个租户一个 TDengine 库
  • 零碎计算设施状态变更的日志数据
  • 零碎中跟设施关联的相干控制台的操作日志数据

TDengine 在平台中的总体架构图如下所示:

相比于原架构,应用 TDengine 之后呈现了以下变动:

  • 平台接入的租户相干库、表通过监听 Kafka 中的 binlog 日志主动初始化,每个设施点设置独立一张表,数据分层清晰
  • 将 Cassandra、KairosDB、OpenTSDB 均更换为 TDengine
  • 能够应用 API 或 SDK 对 TDengine 进行读写
  • 缩小了数据流流动、解决以及服务之间的音讯通信步骤
  • TDengine 提供的丰盛函数缩小了实时处理的数据计算
  • TDengine 晋升了读写速度,缩小了数据流解决工夫

2.1 TDengine 表结构设计

具体到表结构设计上,在咱们的理论场景中,采纳的是一个租户一个 database 的形式进行创立,这样的益处有三点:

  • 能够为不同的租户提供独立的数据库,用户数据隔离级别很高,安全性很好
  • 有助于简化数据模型的扩大设计,满足不同租户的独特需要
  • 如果呈现故障,复原数据绝对简略
create database xxx keep 365 days 10 blocks 4 update 1;

2.2 设施运行数据

设施运行数据以设施模型为超级表,该超级表命名规定为 pd_模型标记,例如:pd_devicemodel001,以设施参数为子表名。具体的建表语句如下:

create table pd_devicemodel001(ts timestamp,smallint_value smallint,int_value int,bigint_value bigint,double_value double,boolean_value bool,string_value nchar(200) ) tags(device_model_mark nchar(25),device_mark nchar(25),param_mark nchar(25)) ;

如果须要创立的是单个参数的数据表,那子表命名规定是 pd_模型标记_参数标记,例如:
pd_devicemodel001_param01。具体的建表语句如下:

create table pd_devicemodel001_param01 using pd_devicemodel001 tags ("device01","did01","di0001");

2.3 设施状态变更日志

在设施状态变更日志时超级表命名为 device_state_change_log,代码如下所示:

create table if not exists device_state_change_log (ts timestamp,change_type nchar(10),status_before nchar(10),status_after nchar(10)) tags (device_model_mark nchar(25),device_mark nchar(25));

如果是单个设施一张子表的模式,子表命名规定为 dsl_模型标记_设施标记,例如:al_model01_device01。

create table if not exists %s using device_state_change_log tags ("devicemodleMark001","device01");

2.4 设施信息变更日志

在设施信息变更日志时超级表命名为 device_info_change_log,代码如下所示:

create table if not exists device_info_change_log (ts timestamp,opera_user nchar(50),change_type nchar(10),change_info nchar(50),info_before nchar(200),info_after nchar(200)) tags (device_model_mark nchar(25),device_mark nchar(25));

单个设施一张子表状况下,子表命名规定为 dil_模型标记_设施标记,例如:al_model01_device01。

create table if not exists %s using device_info_change_log tags ("devicemodleMark001","device01")

2.5 问题及解决

咱们刚开始应用的是 TDengine 2.0.13.0 的版本,在建表以及应用过程中遇到了一些问题,次要包含以下 3 点:

  • TDengine 数据列须要提前创立
  • TDengine 数据列长度不可批改
  • 在新建设施操作日志表时,提醒 DB error: invalid SQL: row length exceeds max length (0.000505s)

在咱们跟涛思数据的技术专家进行相干沟通后,他们倡议将 TDengine 降级到 2.2.2.0 的最新稳固版本,该版本反对数据列的动静新增、批改。在沟通中还发现,下面问题中“建表报错”一项是因为单条记录数据超长了,按理说总长度不能超过 16KB,前面咱们对字段长度进行了调整,问题随即迎刃而解。

三、具体的成果展现

接下来为大家展现一下 TDengine 在压缩率(存储)、写入、查问等性能上的各种数据。

3.1 单机写入性能

1)模仿 10 个厂区的数据、每个厂区 10000 个监测点,每个监测点从 2020-01-01 00:00:00.000 开始写入模仿数据,记录时间戳距离 5 秒,每个测点写入 100 万条记录
2)写入的数据该当保持一致,生成形式为:将 10000 条实在采集的数据复制 100 份,工夫戳依照 5 秒距离主动生成,别离作为不同测点的数据写入数据库
3)记录以下内容,并察看写入过程中客户端线程数、CPU、内存资源使用率:

  • 确认 1000 亿条记录全副正确写入数据库
  • 均匀每秒写入点数
  • 所有写入申请实现的总时延

最终显示的后果为——条数 / 秒:2348220 总时延(秒):42585.4531

3.2 时序数据库压缩比

1)确认 1000 亿条记录原始数据文件大小,不计算标签为 1117.59GB,算上标签为 67.666TB;
2)落盘后数据文件大小(自带缓存的时序库需重启服务保障数据文件落盘);
3)计算压缩比 = 落盘后数据文件大小 / 原始数据文件大小;
落盘后所有文件大小为 113GB,压缩比为 10.11%

3.3 时序数据库单测点原始历史数据投影查问性能

1)随机抉择任一个测点,查问该测点在某个时间段内的历史数据,比方从 2020-01-10 00:00:00.000 到 2020-01-11 00:00:00.000 一天内的共 17280 条数据记录(数据输入到文件)。
数据库中对应查问语句为:

select * from pt123 where ts >= '2020-01-10 00:00:00.000' and ts <= '2020-01-11 00:00:00.000' >> /dev/null

2)记录以下内容:

  • 确认查问后果、记录条数正确
  • 查问总耗时

3)反复执行上述查问 3 次,记录均匀耗时
具体后果为——3 次均匀时延(秒):0.13785

3.4 时序数据库单测点原始历史数据聚合查问性能

1)随机抉择任一个测点,查问该测点在某个时间段测点采集值的 count、max、min、avg,比方从 2020-01-01 00:00:00.000 到 2020-02-01 00:00:00.000 31 天内的共 535680 条数据记录的 count、max、min、avg。数据库中对应查问语句为:

select count(*), max(col1), min(col1), avg(col1) from pt1231 where ts >= '2020-01-10 00:00:00.000' and ts < '2020-01-11 00:00:00.000'

2)记录以下内容:

  • 确认查问后果正确
  • 查问总耗时

3)反复执行上述查问 3 次,记录均匀耗时
具体后果为——3 次均匀时延(秒):0.010504

目前咱们曾经将 TDengine 利用在数据采集、数据处理、数据边缘计算、数据存储等诸多方面,在理论业务中也展现出了如上所示的超强性能,特地是在解决超高频的数据采集、边缘智能计算框架、数据流引擎和数据模型等方面效果显著,面对海量数据轻松实现实时全生命周期治理。

四、写在最初

在本次我的项目中,TDengine 展现出了弱小的读写性能和数据压缩能力,聚合类查问速度十分快,也帮忙咱们无效升高了机器应用老本。超级表、子表、标签等概念十分适配物联网大数据利用场景,后劲有限。

将来心愿 TDengine 倒退可能越来越好,期待周边生态工具更加欠缺。


⬇️点击下方图片查看流动详情,iPhone 13 Pro 等你带回家!

正文完
 0