千亿级工业大数据的最优方案!智光电气的时序数据库应用

小T导读

此前,智光电气(股票代码:002169)子公司智光研究院在工业项目中使用基于 Apache Hadoop 的 CDH 集群来做时序业务数据的处理,但由于数据量级太大,处理占用了大量资源,导致集群有发生崩溃的风险。在此背景下,智光研究院选择应用  TDengine 进行技术升级,并产出本文分享应用经验。

作者:陈晓琪,智光研究院架构师,行业内多年开发与架构经验。

当前 TDengine 已成功应用于我司多个工业项目中,涵盖数万台各类工业设备的数据存储与查询。作为数据中台,TDengine 为上层应用提供了高效的历史数据查询,精确到秒级和分钟级粒度,帮助我们大幅提升了应用效率,同时减少了硬件和人力资源的消耗。

选型背景

在使用 TDengine 之前,我们使用的是基于 Apache Hadoop 的 CDH 集群。但是由于时序业务数据的量级太大,处理它们占用了太多的资源,这也导致集群的不稳定性增加,有频繁发生崩溃的风险。

因此,我们急需一款时序数据库(Time Series Database,TSDB)进行技术升级。经过充分测试后,团队最终决定把由 HBase 处理的、数据量最大的时序数据业务抽离出来,引入 TDengine 来降低 Hadoop 集群的压力,成为独立出来的数据中台。

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

我们的设备数据首先通过边缘网关进行采集,然后通过 MQTT 协议上报到工业互联网平台,报上来的数据经过物模型解析后发送到 Kafka 集群,再把原始数据和经过降采样计算的分钟级数据写入到 TDengine 集群当中,以实现高效的数据存储和查询。

经验分享

从一个时序数据库的初学者到使用者,我们最大的心得就是:

数据建模可以说是最重要的一个环节,也是关乎是否能够顺利用好 TDengine 的根基。

考虑到对降采样查询的大量需求,我们经过实际测试后发现,将这些计算量完全交给 TDengine 来做实时计算是不现实的。在此背景下我们选择在应用层先做好一层降采样计算,再写入数据库。为此我们将数据分为了原始数据和分钟级数据两类,对应到 TDengine 当中:iotdb 是原始数据,processeddb 是分钟级库。这种数据分类和存储方式也更加符合我们的需求。

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

当全量数据导入之后(几千亿行),我们又发现了新的查询性能问题,当时还以为 TDengine 的性能已经封顶了。之后在 TDengine 官方团队的协助定位下才找到核心问题——分钟级库与原始数据的写入频率差异过大,不能公用一套参数配置。

为了解决这一问题,后面官方根据我们实际的业务场景,分别对不同类型的数据进行建库建表,做了针对性的建模优化。然后我们又耐下心来,再次重新导入全量数据。

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

改造效果

经过官方协助优化后,数据块变得更加紧密,压缩率和查询写入性能均得到了大幅提升。

最终的成果如下:

写入存储方面,同样是列式存储,以半年的数据作为比较,三副本的 HBase 的总数据量占用是 10TB,TDengine 三副本的磁盘占用只有 2TB,存储成本仅为 HBase 的 20 %。(由于和其他应用共用,内存、CPU 方面不好估算,但成本均大幅降低)

在查询上,我们的业务主要就是针对 rundata_t1m(分钟级数据)、rundata(原始数据)这两张千亿级别的大型超级表的筛选、过滤、降采样。应用的查询性能和 SQL 筛选的时间范围相关较大,整体上的耗时大概在毫秒级至 2 秒内。

具体展示如下:

  • 分钟级数据的 5 分钟级数据查询(取 5 分钟内最后的值)
select tbname, _wend - 1 as ts, LAST(val) AS val from rundata_t1m where tbname in ('b5Sk4IV6ld6-LErYYdQ1-ProcUsedPercent') and ts >= 1698768000000 and ts <= 1701100799000 partition by tbname interval(5m, 1a);

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

  • 分钟级数据的 15 分钟级数据查询(取 15 分钟内最后的值)
select tbname, _wend - 1 as ts, LAST(val) AS val from rundata_t1m where tbname in ('b5Sk4IV6ld6-LErYYdQ1-ProcUsedPercent') and ts >= xxx and ts <= xxx partition by tbname interval(15m, 1a);

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

  • 原始数据的秒级数据查询
select tbname, _wend - 1 as ts, LAST(val) AS val from rundata where tbname in ('b5Sk4IV6ld6-LErYYdQ1-ProcUsedPercent') and ts >= xxx and ts <= xxx partition by tbname interval(1s, 1a);

千亿级工业大数据的最优方案!智光电气的时序数据库应用 - TDengine Database 时序数据库

写在最后

TDengine 作为一款出色的国产时序数据库,在实际应用中真正地为我们提供了巨大帮助。因此,我们决定整理成文,希望能够吸引更多的企业和开发者加入我们的行列,共同探索 TDengine 的优势和潜力。让我们一起共同推动国产数据库技术的发展!

企业简介:

智光研究院(广州)有限公司【智光电气(股票代码:002169)下属子公司】,是一家在能源动力技术领域具有深厚行业背景和创新研发能力的应用技术研究机构。凭借丰富的行业背景和创新研发能力,智光研究院在综合能源工业互联网平台应用、大型工业设备状态监测和智能运维管理、能源系统数字化管理和能量优化、新能源、储能、电动化等方面取得了多项成果。目前已成功投入使用综合能源服务工业互联网平台和多个垂直领域应用系统。


了解更多 TDengine Database的具体细节,可在GitHub上查看相关源代码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何实现订单自动取消

由于Redis具有过期监听的功能&#xff0c;于是就有人拿它来实现订单超时自动关闭的功能&#xff0c;但是这个方案并不完美。今天来聊聊11种实现订单超时自动关闭的方案&#xff0c;总有一种适合你&#xff01;这些方案并没有绝对的好坏之分&#xff0c;只是适用场景的不大相同。…

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭

亚马逊云科技 re:Invent 大会 - ElastiCache Serverless模式来袭 本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道。 文章目录 亚马逊云…

Apache SeaTunne简介

Apache SeaTunne简介 文章目录 1.Apache SeaTunne是什么&#xff1f;1.1[官网](https://seatunnel.apache.org/)1.2 项目地址 2.架构3.特性3.1 丰富且可扩展的连接器和插件机制3.2 支持分布式快照算法以确保数据一致性3.3 支持流、批数据处理&#xff0c;支持全量、增量和实时数…

30. 深度学习进阶 - 池化

Hi&#xff0c;你好。我是茶桁。 上一节课&#xff0c;我们详细的学习了卷积的原理&#xff0c;在这个过程中给大家讲了一个比较重要的概念&#xff0c;叫做input channel&#xff0c;和output channel。 当然现在不需要直接去实现, 卷积的原理PyTorch、或者TensorFlow什么的…

YOLOv5改进 | 卷积篇 | SPD-Conv空间深度转换卷积(高效空间编码技术)

一、本文介绍 本文给大家带来的改进内容是SPD-Conv&#xff08;空间深度转换卷积&#xff09;技术。SPD-Conv是一种创新的空间编码技术&#xff0c;它通过更有效地处理图像数据来改善深度学习模型的表现。SPD-Conv的基本概念&#xff1a;它是一种将图像空间信息转换为深度信息…

叙永县微公益协会举办“对不适触碰说‘NO’”预防性侵教育活动

&#xff08;梁平 赵维维&#xff09;12月16日&#xff0c;一场主题为“对不适触碰说‘NO’”的预防性侵教育活动在叙永县摩尼社工站成功举行。此次活动由叙永县微公益协会主办&#xff0c;得到了叙永县民政局和摩尼镇人民政府的大力支持和指导。本次活动旨在加强儿童性教育&am…

字节跳动回应被 OpenAI 封禁账户:正与 OpenAI 联系沟通

据 The Verge 报道&#xff0c;字节跳动一直在秘密使用 OpenAI 的技术开发自己的具有竞争性的大语言模型&#xff0c;这违反了 OpenAI 的服务条款。目前&#xff0c;字节跳动的账户已被 OpenAI 暂停。 OpenAI 的服务条款规定&#xff0c;公司所输出的模型不能被用于「开发任何…

a*算法代码 python,python isalpha方法

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;a*算法代码 python&#xff0c;python isalpha方法&#xff0c;今天让我们一起来看看吧&#xff01; 更新&#xff1a; GitHub - pierrepaleo/sift_pyocl: An implementation of SIFT on GPU with OpenCL python-siftgp…

回收站数据恢复,分享3个可行方法!

“我真的太粗心啦&#xff01;本来想删除一些电脑里不重要的文件&#xff0c;但是不小心把一些很重要的文件一起删除了&#xff0c;这可怎么办呢&#xff1f;我应该通过什么方法找回这些文件呢&#xff1f;” 在使用电脑的过程中&#xff0c;误删文件是很多用户都无法避免的一件…

【Swiss-Model 同源建模】

Swiss-Model是一种同源建模方法&#xff0c;其基本原理是利用序列的同源性来推断蛋白质的三维结构。具体来说&#xff0c;就是通过找到与目标蛋白质序列同源且结构已知的模板蛋白质&#xff0c;来预测目标蛋白质的结构。 同源建模的主要步骤包括&#xff1a; 模板的确定&…

【网络协议】网络运维管理神经-SNMP协议

文章目录 什么是SNMP&#xff1f;SNMP的组件SNMP的历史版本SNMP端口SNMP配置案例SNMP工作原理SNMP的基本工作原理SNMP的操作类型SNMP TrapsSNMP Inform SNMP的应用场景推荐阅读 什么是SNMP&#xff1f; SNMP&#xff08;Simple Network Management Protocol&#xff0c;简单网…

css的元素显示模式(有单行文字垂直居中,侧边栏等案例)

目录 1. 什么是元素的显示模式 2. 元素显示模式的类型 块元素 行内元素 行内块元素 3. 元素显示模式的转换 4.文字垂直居中 5.具体实现案例 1. 什么是元素的显示模式 定义&#xff1a;元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0c;…

SpringBoot整合Redis——实现点赞功能

目录 点赞功能 设计思路 实现 正在思考和学习的问题 回顾redis中的set 使用方法 使用场景 回顾springboot整合redis 1.引入必要的依赖。 2.在配置文件application.properties/yml中 配置redis的连接信息 3. 测试 点赞功能 设计思路 点赞功能的两个接口&#xff1a; 1.点赞&…

Spring之容器:IOC(1)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

自动封箱打包码垛缠绕流水线案例

广西交投在某地新建工厂后&#xff0c;需要建设一条生产隧道灯&#xff0c;后段自动封箱打包码垛缠绕包装线。 凯隆包装在深入了解客户需求后&#xff0c;结合客户实际生产情况&#xff0c;为客户量身定制了集智能感应系统、产品自动折盖上下封箱、捆扎两道打包带、码垛机械臂自…

Linux平台下HTTP协议使用指南与代码展示

在Linux平台下&#xff0c;HTTP协议的应用非常广泛&#xff0c;它被用于Web开发、网络爬虫、API调用等场景。了解并掌握HTTP协议&#xff0c;对于Linux系统的开发和使用都非常重要。下面&#xff0c;我们将为您介绍Linux平台下HTTP协议的使用指南&#xff0c;并通过代码展示来帮…

设计模式(3)--对象结构(4)--装饰

1. 意图 动态地给一个对象添加一些额外的功能。 2. 四种角色 抽象组件(Component)、具体组件(Concrete Component)、抽象装饰(Decorator)、具体装饰(Concrete Decorator) 3. 优点 3.1 比静态继承更灵活。 3.2 避免在层次结构高层的类有太多的特征。"即用即付"&…

【洛谷算法题】P1424-小鱼的航程(改进版)【入门2分支结构】Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P1424-小鱼的航程&#xff08;改进版&#xff09;【入门2分支结构】&#x1f30f…

程序员必备算法

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

60.Sentinel源码分析

Sentinel源码分析 1.Sentinel的基本概念 Sentinel实现限流、隔离、降级、熔断等功能&#xff0c;本质要做的就是两件事情&#xff1a; 统计数据&#xff1a;统计某个资源的访问数据&#xff08;QPS、RT等信息&#xff09; 规则判断&#xff1a;判断限流规则、隔离规则、降级规…