数据压缩比 38.65%,TDengine 重塑 3H1 的存储与性能

小T导读:这篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一。作者通过自身实践,详细分享了 TDengine 在高端装备运维服务平台中的应用,涵盖架构改造、性能测试、功能实现等多个方面。从压缩效率到查询性能,从功能优化到使用体验,文章不仅展示了 TDengine 的技术优势,也提出了许多宝贵的改进建议,给人以深刻启发。

为什么选择 TDengine?

在装备行业的物联网场景中,实时数据量极为庞大,涵盖温度、压力、振动、位移等多种参数,对这些数据的高效分析和精准预警成为一大挑战。具体需求可以总结如下:

  • 高并发写入:需要支持每条记录附带时间戳的高频数据写入。

  • 灵活表设计:不同传感器设备的数据字段各不相同,需要针对每个设备灵活建表。

  • 长期存储与压缩:原始数据需存储至少 5 年,要求具备高效的数据压缩能力以降低存储成本。

  • 国产化支持:需满足国产化要求,并能提供快速响应的厂商服务。

我们选择使用 TDengine 社区版 2.2.1.1 进行分布式模拟测试,实验环境搭建在以下配置的三台服务器上:

测试一:验证时序数据库在 3 台节点上的写入性能 模拟了 2 个厂区、共 10 个车间的数据,每个车间包含 1000 个监测点。从 2017-07-14 10:40:00.000 开始写入模拟数据,时间戳间隔为 0.001 秒,每个监测点写入 50 万条记录。

测试采用 8 个线程并行写入。在超过 50 亿条记录后停止写入程序,测试结果显示,平均写入速度达 191 万条/秒

测试二:验证时序数据库在 3 台节点上的数据压缩能力 基于测试一的结果,检查 3 台数据库节点的实际文件存储大小,具体数据如下:

落盘后的文件总大小为 36GB,而原始数据大小为约 93.13GB(按 50 亿条记录,每条 20 字节计算)。由此可得,数据压缩比达到 38.65%

测试三:验证时序数据库在 3 台节点上的历史数据回溯查询性能 随机选取一个测点,查询其在特定时间段内的历史数据。例如,从 2017-07-14 10:40:00.0002017-07-14 10:40:10.000,共计 10 秒内的 10001 条记录(查询结果输出至文件)。对应的数据库查询语句如下:

select * from d0 where ts >= ‘2017-07-14 10:40:00.000’ and ts <= ’2017-07-14 10:40:10.000’ >> /dev/null;

试验证明,TDengine 具有卓越的写入性能、高并发能力以及极低的查询延迟。其分布式架构确保了系统的可靠性、稳定性和数据完整性。基于测试结果,我们迅速将 TDengine 应用于现有业务系统,进行升级改造入。

TDengine 在 3H1 上的落地实践

3H1 高端装备运维服务平台重点解决高端成形装备企业由制造化向服务化转型的关键问题,为企业提供工业互联网与智能运维的整体解决方案。

如下图所示,TDengine 与高端成形装备的智能数据采集终端模块深度集成,助力采集终端完成对设备运行数据的采集,为系统提供设备数据基础。工业云计算服务平台则进一步提供数据的存储、转换和分析能力,为业务系统提供强有力的数据支持。同时,智能运维服务系统由装备智能运维服务平台和智能运维服务 APP 组成,分别为企业人员提供系统和移动端的服务支持。

针对企业多种应用场景,系统应用服务共分为以下六大功能模块:

1.企业驾驶舱:专为设备制造企业的管理者设计,便于全面掌握平台数据和关键业务流程指标。通过直观的界面,管理者可以轻松了解设备销售情况、企业接入信息以及平台数据的采集情况。同时,驾驶舱支持对关键业务流程进行管理,包括设备监控、报警信息展示、维修效率分析、设备故障情况以及三包任务的追踪和管理。

2.设备资源管理:旨在为每台高端成形装备建立电子档案,便于全面了解设备的历史状态、当前运行情况,并优化设备运行与未来状况预测。在查看具体设备信息时,系统主要呈现以下四个维度:当前工况健康分析维修情况历史工况

其中,当前工况为用户提供设备的基本信息、关键指标和报警情况的总览,帮助快速掌握设备的实时运行状态。

健康分析的目的是帮助用户全面掌握设备的当前状态以及健康状况随时间的变化趋势。如果设备面临故障风险,系统能够快速识别风险来源及故障模块,为用户提供精准的诊断支持。

维修情况则是为用户提供设备维修信息的全面概览,并支持对当前维修任务的流程进行实时跟踪。

历史工况是为了进行故障模块预排查。

3.维修服务管理:面向维修服务部门,提供维修任务的实时状态和历史效率分析。系统展示当前待处理任务数量,例如待接单、待派单和待回访任务,并支持查看和操作每项任务,详尽覆盖维修流程的每个环节。

维修效率分析则是对维修中的关键效率指标进行统计分析,包括近一年来的订单量的变化情况、维修响应时间变化情况、故障类型分布、维修人员任务统计等,方便维修管理人员对维修服务和效率进行管理。

4.设备健康分析:通过分析设备的历史和当前运行数据,预测设备未来可能发生的故障,并提供故障的可能性和类型评估,帮助维修部门为用户制定维保策略,提前主动联系用户,提升服务效率。

5.三包服务管理:服务于三包部门,提供当前维保活动提醒、设备维保活动记录、设备维保到期预警等功能。

6.备品备件管理:通过建立与维修保养相关的备品备件档案,用户和相关部门人员可在移动端和系统端进行备件的查询、申请和审批操作,简化流程,提高维修保养效率。此外,利用数据分析预测备品备件需求,既能满足需求,又能有效降低库存成本。

引入 TDengine 后,这六大功能模块的使用效果显著提升,不仅在数据写入和查询性能上表现优异,高效的压缩效率也进一步优化了性能与成本的平衡,实现了最佳的系统效能。

分析思路环节

架构改造升级到 TDengine 后,效果非常明显,硬件资源减少到原来的 1/5,效率有了明显的提升。我们相信,随着存储规模的不断变大,这种改善和提升效果会越来越明显。此外,在运维管理、费用支出、开发测试等方面也有了很大的改善。

  • 开发人员现在可以自己电脑上搭建一套环境,随便折腾,不用担心跑不起来,也不用担心影响别人;

  • 性能测试的时候,用配置低一些的机器也没问题,照样能做出压测效果;

  • 遇到技术难题,原来通过 Google、百度、StackOverflow 寻找答案,现在可以直接在官方渠道 https://github.com/taosdata/TDengine 提 issue,也可以在 TDengine 的技术社区进行提问,TDengine 的技术专家亲自答复,响应非常快;

  • TDengine 的体积小,上传起来非常快,有些私有化部署项目,不允许访问外网,只能手动上传,体积小的优势就非常明显;

  • 安装部署简单,配合 Docker 容器,可以在几分钟内完成安装部署;

  • 运营监控工作变简单了,只需要对 TDengine 的几个进程进行监控;

  • 占用的磁盘空间明显变小了,减少到原来的 1/5;

  • 使用的主机减少到原来的 1/5,相应的费用支出也减少了。

总结思考

此次升级改造总体较为顺利,但也遇到了一些挑战,特别是在数据建模过程中。但办法总比困难多,通过一些方法和技巧,我们成功将 TDengine 调整为 schema-free 数据库,满足了本项目的需求,最终顺利完成了系统的升级改造。

目前,TDengine 已全面支持所有物联网设备的数据上报,并为应用层提供了多种场景的支持。我们现在使用到的功能还比较简单,主要是插入、连续查询和降采样查询,但这已足够满足物联网平台的需求。像 UNIONGROUP BYJOIN 和聚合查询等高级功能虽然暂未使用,但它们在大数据分析中非常有价值,未来可在相关项目中尝试使用,甚至有望替代 Hadoop 全家桶。

在使用过程中,我们也发现了一些可以改进的地方:

  • JDBC-JNI 依赖动态库,导致安装和部署较为繁琐。虽然通过 JDBC-RESTful 解决了这个问题,但多了一层 RESTful Connector,性能略有下降。理想的解决方案是开发一个基于纯 Java 的 JDBC 驱动,直接连接后端服务。

  • 客户端以命令行形式为主,对开发者,尤其是初学者或习惯图形界面的用户并不友好。图形界面支持如语法高亮、语法检查等功能非常实用。目前已有社区开发者贡献了两个 GUI 工具,但如果能由官方提供支持,体验会更佳。

总而言之,在引入 TDengine 后,3H1 原有业务系统通过升级改造实现了显著提升,不仅大幅降低了研发和维护成本,还成功实现了横向扩展。TDengine 出色的查询性能令人惊喜,其卓越的压缩效率也显著节省了存储资源。未来,我们计划在更多应用场景中探索 TDengine 的潜力,并进一步深化与 TDengine 的合作。

TDengine 知识点

安装 TDengine

下载地址:https://docs.taosdata.com/get-started/package/

目前 TDengine 在 Windows 平台上只支持 Windows Server 2016/2019 和 Windows 10/11。这里我们先下载和安装 TDengine-server-3.0.1.7-Windows-x64.exe。安装之后的文件夹如下:

运行 TDengine

TDengine 安装完成后,我们可以在拥有管理员权限的 cmd 窗口执行 sc start taosd 或在 C:\TDengine 目录下,运行 taosd.exe 来启动 TDengine 服务进程。

执行 TDengine 命令行

为了方便检查 TDengine 的运行状态并执行各种即席(Ad Hoc)查询,TDengine 提供了命令行工具 TDengine CLI(简称 taos)。只需在终端输入 taos,即可进入命令行界面开始操作。

新建数据库(脚本文件)

在 TDengine CLI 中,我们可以使用 source 命令运行脚本文件中的多条 SQL 命令,实现批量执行操作。

# taos> source <filename>;
taos> source test.txt;

test.txt 内容如下:

CREATE DATABASE demo2;
USE demo2;
CREATE TABLE t (ts TIMESTAMP, speed INT);
INSERT INTO t VALUES ('2019-07-15 00:00:00', 10);
INSERT INTO t VALUES ('2019-07-15 01:00:00', 20);
SELECT * FROM t;

taosBenchmark 命令(体验写入速度)

你可以通过 TDengine 自带的工具 taosBenchmark 快速测试其写入速度。启动 TDengine 服务后,在终端运行 taosBenchmark(前身为 taosdemo)即可体验。

taosBenchmark --help
taosBenchmark

该命令会在数据库 test 下自动创建一个超级表 meters,其下包含 1 万张子表,表名为 d0d9999。每张表包含 1 万条记录,每条记录包含 ts(时间戳)、current(电流)、voltage(电压)、phase(相位)四个字段,时间戳范围从 2017-07-14 10:40:00.0002017-07-14 10:40:09.999。此外,每张表附带两个标签:groupId(取值 1 至 10)和 location(California.Campbell、California.Cupertino、California.LosAngeles、California.MountainView、California.PaloAlto、California.SanDiego、California.SanFrancisco、California.SanJose、California.SantaClara 或 California.Sunnyvale)。

表管理

# 创建表
use testdb;
create table t1 (ts TIMESTAMP,name1 BINARY(100)) ;# 查看表结构
describe t1;# 插入数据
insert into t1 values(‘2021-03-10 22:37:36.100’,‘test’);# 查询表
select * from t1;# 查看当前所有表
show tables;

TDengine 提供了丰富的应用程序开发接口,支持多种编程语言的连接器,帮助用户快速开发应用。官方连接器涵盖 C/C++JavaPythonGoNode.jsC#Rust,可通过原生接口(taosc)或 REST 接口(部分语言暂不支持)连接 TDengine 集群。此外,社区开发者还贡献了多种非官方连接器,如 ADO.NETLuaPHP 连接器,进一步扩展了生态支持。

taospy 是 TDengine 的官方 Python 连接器,提供了丰富的 API,使 Python 应用能够轻松集成 TDengine。它封装了 TDengine 的原生接口和 REST 接口,分别对应 taospy 包中的 taos 模块taosrest 模块。此外,taospy 提供了符合 Python 数据访问规范(PEP 249)的编程接口,使其与 SQLAlchemypandas 等第三方工具的集成更加便捷。

taos-ws-py 是另一款 Python 连接器,通过 WebSocket 方式连接 TDengine,可根据需求选择使用。

在连接方式上,使用客户端驱动的原生接口直接与服务端建立的连接称为“原生连接”;通过 taosAdapter 提供的 REST 或 WebSocket 接口与服务端建立的连接,分别称为“REST 连接”或“WebSocket 连接”。

TDengine 典型的操作流程

在第二和第三步中,taosc 启动时并不知道 mnode 的 End Point,会直接向配置的集群对外服务 End Point 发起请求。如果目标 dnode 未配置 mnode,它会在回复中提供 mnode 的 End Point 列表,随后 taosc 会重新向指定的 mnode 发送请求以获取元数据。

在第四和第五步中,如果没有缓存,taosc 无法确定虚拟节点组中的 master 节点,默认假设第一个 vnodeID 为 master 并发出请求。如果目标 vnode 并非 master,它将在回复中提供正确的 master 信息,taosc 随后向指定的 master 节点发起请求。一旦插入成功,taosc 会将 master 节点的信息缓存起来。

上述流程不仅适用于插入数据,也同样适用于查询和计算操作。这些复杂的处理均由 taosc 封装,应用无需感知或进行额外处理。

通过 taosc 的缓存机制,仅在首次操作某表时才需要访问 mnode,从而避免 mnode 成为系统瓶颈。但由于可能存在 schema 变更或 vgroup 调整(如负载均衡),taosc 会定期与 mnode 交互以自动更新缓存。

多表聚合查询

TDengine 为每个数据采集点单独建表,但在实际应用中,往往需要对多个采集点的数据进行聚合分析。为提升聚合操作的效率,TDengine 引入了 超级表(STable) 的概念。超级表代表一类特定类型的数据采集点,包含多个子表,这些子表的模式(schema)完全一致,同时具有各自的静态标签。标签可以有多个,并支持动态增删和修改。

通过设置标签过滤条件,用户可以对超级表下的全部或部分子表进行聚合或统计操作,大幅简化应用开发流程。具体流程如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/493025.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电气设计 | 低压接地系统:TN-C 、TN-S、TN-C-S、TT适用哪些场所?

电气设计 | 低压接地系统&#xff1a;TN-C 、TN-S、TN-C-S、TT适用哪些场所&#xff1f; 1、低压配电系统简介2、各种低压配电系统介绍2.1、TN-C系统2.2、TN-S系统2.3、TN-C-S 系统2.4、TT 系统2.5、IT 系统 1、低压配电系统简介 低压配电系统有TN-C、TN-S、TN-C-S、TT和IT五种…

onlyoffice连接器 二次开发 合同等制式模板化技术开发方案【三】

一、期望效果 目前曹瑞版本onlyoffice已经实现&#xff1a;书签模式 和 控件模式&#xff0c;用以支持该方案。 【图1】字段绑定 【图2】模板发起 【图3】接入表单 思路讲解&#xff1a; 业务系统开发中通常希望能够通过绑定form字段给word&#xff0c;从而达到双向同步效果&am…

word实现两栏格式公式居中,编号右对齐

1、确定分栏的宽度 选定一段文字 点击分栏&#xff1a;如本文的宽度为22.08字符 2、将公式设置为 两端对齐&#xff0c;首行无缩进。 将光标放在 公式前面 点击 格式-->段落-->制表位 在“制表位位置”输入-->11.04字符&#xff08;22.08/211.04字符&#xff09;&…

37. Three.js案例-绘制部分球体

37. Three.js案例-绘制部分球体 实现效果 知识点 WebGLRenderer WebGLRenderer 是Three.js中的一个渲染器类&#xff0c;用于将3D场景渲染到网页上。 构造器 WebGLRenderer( parameters : Object ) 参数类型描述parametersObject渲染器的配置参数&#xff0c;可选。 常用…

笔记本电脑需要一直插着电源吗?电脑一直充电的利弊介绍

笔记本电脑属于常用电子设备&#xff0c;它的便携性和功能性给我们带来了很多便利。但是&#xff0c;我们在使用笔记本电脑的时候&#xff0c;是否应该一直插着电源呢&#xff1f;这个问题可能困扰了很多人&#xff0c;因为不同的使用方式可能会对笔记本电脑的性能和寿命产生不…

深入理解延迟队列:原理、实现与应用

深入理解延迟队列&#xff1a;原理、实现与应用 1. 什么是延迟队列 延迟队列&#xff08;Delayed Queue&#xff09;是一种特殊的队列&#xff0c;它的特点是队列中的元素需要在指定的时间后才能被消费者获取和处理。与普通的先进先出&#xff08;FIFO&#xff09;队列不同&a…

内容与资讯API优质清单

作为开发者&#xff0c;拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源&#xff0c;为你的开发工作提供了强大的支持&#xff01;无论你是在构建网站、开发应用还是进行数据分析&#xff0c;这个合集都能满足你的需求。你可以通过这些免费API获…

jQuery总结(思维导图+二维表+问题)

关于什么是jQuery&#xff1a;&#xff08;下面是菜鸟里的介绍&#xff09; jQuery 是一个 JavaScript 库。 jQuery 极大地简化了 JavaScript 编程。 jQuery 很容易学习。 而jQuery对我的感受就是&#xff0c;链式运用的很形象&#xff0c;隐式迭代还有一些兼容性强的优点&…

python数据分析:介绍pandas库的数据类型Series和DataFrame

安装pandas pip install pandas -i https://mirrors.aliyun.com/pypi/simple/ 使用pandas 直接导入即可 import pandas as pd pandas的数据结构 pandas提供了两种主要的数据结构&#xff1a;Series 和 DataFrame,类似于python提供list列表&#xff0c;dict字典&#xff0c;…

安装opnet14.5遇到的问题

安装opnet遇到的问题 我是按照这个教程来安装的。 然后遇到了两个问题&#xff1a; 1、“mod_dirs”目录问题 Can’t enable ETS scripting support due to missing files。 This is likely because:<opnet_release_dir>\sys\lib is notinclude in the “mod_dirs” pre…

SLAAC如何工作?

SLAAC如何工作&#xff1f; IPv6无状态地址自动配置(SLAAC)-常见问题 - 苍然满关中 - 博客园 https://support.huawei.com/enterprise/zh/doc/EDOC1100323788?sectionj00shttps://www.zhihu.com/question/6691553243/answer/57023796400 主机在启动或接口UP后&#xff0c;发…

6.3.1 MR实战:计算总分与平均分

在本次实战中&#xff0c;我们的目标是利用Apache Hadoop的MapReduce框架来处理和分析学生成绩数据。具体来说&#xff0c;我们将计算一个包含五名学生五门科目成绩的数据集的总分和平均分。这个过程包括在云主机上准备数据&#xff0c;将成绩数据存储为文本文件&#xff0c;并…

空天地遥感数据识别与计算--数据分析如何助力农林牧渔、城市发展、地质灾害监测等行业革新

在科技飞速发展的时代&#xff0c;遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究&#xff0c;空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而&#xff0c;对于许多专业人士而言&#xff0c;如何高效地处…

基于langchain的Agent(实现实时查询天气)

心血来潮&#xff0c;玩一下Agent&#xff0c;实现了多轮对话功能 import requests, jsonfrom langchain.agents import load_tools from langchain.agents import initialize_agent from langchain_community.llms.tongyi import Tongyi from langchain.memory import Conver…

《剑网三》遇到找不到d3dx9_42.dll的问题要怎么解决?缺失d3dx9_42.dll是什么原因?

《剑网三》游戏运行中d3dx9_42.dll缺失问题深度解析与解决方案 在畅游《剑网三》的武侠世界时&#xff0c;不少玩家可能会遇到系统提示“找不到d3dx9_42.dll”的报错信息。这一突如其来的问题不仅让游戏进程受阻&#xff0c;还可能让玩家陷入困惑与无奈。我将为大家深入剖析这…

springboot443旅游管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统旅游管理系统信息管理难度大&#xff0c;容错率低&#…

OneCode:开启高效编程新时代——企业定制出码手册

一、概述 OneCode 的 DSM&#xff08;领域特定建模&#xff09;出码模块是一个强大的工具&#xff0c;它支持多种建模方式&#xff0c;并具有强大的模型转换与集成能力&#xff0c;能够提升开发效率和代码质量&#xff0c;同时方便团队协作与知识传承&#xff0c;还具备方便的仿…

OpenCV(python)从入门到精通——运算操作

加法减法操作 import cv2 as cv import numpy as npx np.uint8([250]) y np.uint8([10])x_1 np.uint8([10]) y_1 np.uint8([20])# 加法,相加最大只能为255 print(cv.add(x,y))# 减法&#xff0c;相互减最小值只能为0 print(cv.subtract(x_1,y_1))图像加法 import cv2 as…

git 删除鉴权缓存及账号信息

在Windows系统下 清除凭证管理器中的Git凭据 按下Win R键&#xff0c;打开“运行”对话框&#xff0c;输入control&#xff0c;然后回车&#xff0c;打开控制面板。在控制面板中找到“用户账户”&#xff0c;然后点击“凭据管理器”。在凭据管理器中&#xff0c;找到“Windows…

【Linux进程】进程间的通信

目录 1. 进程间通信 1.1 进程间通信的目的 2. 管道 2.1 什么是管道 2.2. 匿名管道 匿名管道的特性 管道的4种情况 联系shell中的管道 2.3. 命名管道 代码级建立命名管道 2.4. 小结 总结 1. 进程间通信 进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&…