不停机迁移,TDengine 在 3D 打印技术中的“焕新”之路

小T导读:自 2021 年我们正式使用 TDengine 至今已接近三年,现在 TDengine 已经成熟应用于我们多个项目当中,凭借着强大的读写存储能力,为我司多项业务的核心数据保驾护航。近期我们团队刚好完成 TDengine 2.x 到 3.x 的数据迁移,借此机会将 TDengine 的使用/迁移经验与大家分享。

选型过程及业务背景

我司的主要业务之一就是基于 3D 打印技术给客户提供整体化解决方案,其中一个核心场景是我们要持续追踪设备的运行状态,存储海量的设备运行数据。这是一个典型的物联网系统的核心需求——以设备为维度,按照时间顺序大批量写入和查询设备的各项数据。

这个业务场景非常适合时序数据库(Time Series Database,TSDB),但市场上的时序数据库存在着各种各样的痛点:或是数据读写性能不佳;或是部署的复杂性高,或是难以维护。经过多方考察对比后,我们发现 TDengine 是最适合我们的选择。

从 2.x 到 3.x,TDengine 在黑格智能 3D 打印业务的应用实践 - TDengine Database 时序数据库

TDengine 迁移过程

为顺利升级到 TDengine 3.x 版本,我们先把数据从 2.x 抽出写入到了一个 3.x 版本的临时集群,验证无误之后,再利用如下方案实现了无需停机、不影响业务写入的 3.x 版本之间的数据库迁移工作。过程如下:

a. 新增节点D\E\F:

CREATE DNODE "D";
CREATE DNODE "E";
CREATE DNODE "F";

b. 逐个删除节点A\B\C(以 A 为例):

#删除A节点MNODE角色
DROP MNODE ON DNODE A_DNODE_ID;#添加D节点MNODE角色
CREATE MNODE ON DNODE D_DNODE_ID;#删除A节点,节点A删除过程,节点A的数据会同步到接口D\E\F中
DROP DNODE A_DNODE_ID;

典型业务场景分享

由于一台设备每天有数以万计的数据需要存储,世界各地范围内的设备汇集起来,便产生了海量的数据存储和查询需求。关于 TDengine ,我们主要有以下三个方向的应用:

  • 在设备运行出现问题时,根据消息定位具体的问题;
  • 以设备长时间运行的数据作数据分析,解决设备运行存在的隐患;
  • 生成 BI 报表,展示设备各种传感器最近一段时间的状态。

从众多的超级表中,我们取一个百亿级别的超级表来举例说明 TDengine 的应用过程,具体表结构如下:

从 2.x 到 3.x,TDengine 在黑格智能 3D 打印业务的应用实践 - TDengine Database 时序数据库

当我们对这张设备消息表 s_mqtt 查询 ‘2023-12-15 00:00’ 至 ‘2023-12-15 02:50:00’ 时间段的 ‘1011’ 类型,设备序列号为 ‘xxxxxxx’ 的所有消息内容,可以看到,查询结果是毫秒级返回的

select * from s_mqtt where ts>'2023-12-15 00:00:00.000' and ts<'2023-12-15 03:00:00.000' and device_sn='xx' and kind=1011 ;

从 2.x 到 3.x,TDengine 在黑格智能 3D 打印业务的应用实践 - TDengine Database 时序数据库

TDengine 高效的写入和读取性能很好的满足了我们频繁写入和读取数据的迫切需要。而在存储方面,压缩率经过计算在 10% 左右,也完全符合我们的存储需求。

遇到的问题

在 2.x 升级到 3.x 的过程中,我们遇到了以下两个比较棘手的问题,得到了 TDengine 官方技术团队的技术讲解和远程排查问题等支持,在此衷心表达感谢。

1. vgroups 设置问题。TDengine 3.x 版本增加了 vgroups 参数,代表了数据库读写数据的一个并行度,合理的设置可以最大程度的激发读写性能。我们在测试环境测试时,发觉表的读写比 2.x 版本慢了好多,经 TDengine 技术团队排查,发现我们只使用了默认的 2 个 vgroups,具体使用规则可以参考参考《体验 TDengine 3.0 高性能的第一步,请学会控制建表策略》。

2. taosAdapter 无返回问题。在 TDengine 3.x 版本上线后,微服务通过 restful 方式连接 TDengine 时,taosAdapter 会出现无响应但 taosd 服务正常的现象。这个问题我们自己排查了好久,后面寻求官方技术团队的帮忙,经过远程排查服务器环境和日志分析,最后定位到是我们大量使用”show cluster alive”作为微服务监听语句的频繁请求导致。随后官方建议我们更换”select 1″作为健康检查语句,顺利解决了这个问题。后续官方也优化了”show cluster alive”这个命令的实现,避免类似情况出现。

未来展望

使用 TDengine 三年来,TDengine 在我们的物联网业务、设备 BI 数据展示等模块作用巨大,它直观地展示了设备运行状况,帮助我们快速定位和解决设备问题。接下来,我们将会继续探索 TDengine 在智能设备打印、智能设备运维等方面应用与实践。祝 TDengine 越来越好。


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

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

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

相关文章

VAD语音分割算法详解

1 VAD算法介绍 1.1 语音基本概念 声波通过空气传播&#xff0c;被麦克风接收&#xff0c;通过采样、量化、编码转换为离散的数字信号&#xff0c;即波形文件。音量、音高和音色是声音的基本属性。 采样&#xff1a;原始的语音信号是连续的模拟信号&#xff0c;需要对语音进行…

2024区块链应用趋势,RWA实物资产化

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 实物资产通证化&#xff0…

ffmpeg本地TS和M3U8播放流程及调试过程

本地TS播放过程 本地M3U8播放过程 http工作流程 http分两个步骤 1、获取m3u8文件&#xff0c;这个是在哪里开始读的&#xff1f; 2、获取data数据&#xff0c;这个是从http_read开始读&#xff0c;可以通过修改这里实现buffer数据和引擎对接 3、s->user_agent,s->off,…

Python tkinter (2) —— Button标签

Python的标准Tk GUI工具包的接口 目录 Button 简单示例 设置按钮宽高 设置响应事件 匿名函数调用事件 退出按钮 总结 tkinter系列文章 python tkinter窗口简单实现 Python tkinter (1) —— Label标签 Button Button标签在窗口中显示按钮的控件。 简单示例 实现一个…

1.3编程基础之算术表达式与顺序执行

目录 前言1. AB问题2. 计算(ab)*c的值3. 计算(ab)/c的值4. 带余除法5. 计算分数的浮点数值6. 甲流疫情死亡率7. 计算多项式的值8. 温度表达转化9. 与圆相关的计算10. 计算并联电阻的阻值11. 计算浮点数相除的余数12. 计算球的体积13. 反向输出一个三位数14. 大象喝水15. 苹果和…

STM32 单片机重启(查看上次重启原因)

STM32 HAL 复位源识别 STM32启动后可以识别本次启动是对应哪一种复位源&#xff0c;从而可以根据复位源的状态&#xff0c;做一些特殊处理。 HAL库的复位源识别 以下代码&#xff0c;识别是那种方式进行复位的&#xff0c;只需要将自己在那种方式复位运行的程序添加进去即刻&a…

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据多输入单输出回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab基于OOA-SVR鱼鹰算法优化支持向量机的数据…

go语言(十六)----tag

package mainimport ("fmt""reflect" )type resume struct {Name string info:"name" doc:"我的名字"Sex string info:"sex" }func findTag(str interface{}) {t : reflect.TypeOf(str).Elem()for i : 0;i < t.NumField…

Java面试题136-150

36、用JDBC如何调用存储过程 代码如下&#xff1a; package com.huawei.interview.lym; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Types; public class JdbcTest…

前端面试题-js数据类型-怎么判断是对象还是数组-字符串常用方法-数组常用方法

前端面试题-js部分-js数据类型-怎么判断是对象还是数组-字符串常用方法-数组常用方法 JS数据类型有哪些值类型和引用类型的区别数组的常用方法哪些方法会改变原数组 字符串常用方法对象常用方法怎么判断是对象还是数组 JS数据类型有哪些 数据类型类型描述Number基本类型&#…

Day24_77 组合

77 组合 组合无序&#xff0c;排列有序。1~n个数中选k个数组合&#xff0c;k不确定&#xff0c;组合的方式。 &#xff08;图片来自代码随想录&#xff09;确定回溯法的三部曲&#xff1a; 递归函数的返回值和参数&#xff1a;集合n中取k个数&#xff0c;&#xff0c;每次从…

实用VBA:17.大量word文件中的文本内容进行批量替换

1.需求场景 在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理&#xff0c;个人感觉word文档中由于包含大量样式信息&#xff0c;批处理时总感觉有顾虑。一者担心影响了文档的格式&#xff0c;误修改了文档的样式&#xff0c;那后果……

【操作系统】实验五 添加内核模块

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

使用trace工具分析Mysql如何选择索引

背景说明 工作中,可能会遇到执行一个SQL,明明有索引,但是采用explain分析后发现执行结果并未走索引。甚至还有部分SQL语句相同就只是查询条件不一样也会出现有的走索引,有的不走索引情况。比如: 我的示例环境有个employees表,并有个idx_name_age_position的联合索引…

纯命令行在Ubuntu中安装qemu的ubuntu虚拟机,成功备忘

信息总体还算完整&#xff0c;有个别软件更新了名字&#xff0c;所以在这备忘一下 1. 验证kvm是否支持 ________________________________________________________________ $ grep vmx /proc/cpuinfo __________________________________________________________________…

SpringBoot配置文件-application.yml

1 配置文件后缀.yml(yaml)与.properties 两者均可以被SpringBoot项目自动识别&#xff0c;用于三方技术配置信息(如&#xff1a;mybatis)和自定义配置信息&#xff08;如&#xff1a;自己写的工具类&#xff09;&#xff0c;但是两者的书写规范却有差异。现在以端口号和项目路…

40G QSFP+ ER4光模块:高效稳定的数据传输解决方案

随着网络技术的不断发展&#xff0c;数据传输的速度和效率成为了网络流畅度和稳定性的关键因素。40G QSFP ER4光模块作为最新一代的光纤传输模块&#xff0c;凭借其高速度、高效率、长距离传输等特点&#xff0c;正逐渐在数据中心、企业网络等领域得到广泛应用。 一、40G QSFP…

离线编译 onnxruntime-with-tensortRT

记录为centos7的4090开发机离线编译onnxruntime的过程&#xff0c;因为在离线的环境&#xff0c;所以踩了很多坑。 https://onnxruntime.ai/docs/execution-providers/TensorRT-ExecutionProvider.html 这里根据官网的推荐安装1.15 版本的onnx 因为离线环境&#xff0c;所以很…

1. Matplotlib的Figure基础概念

1. Matplotlib的Figure基础概念 一 **角色和作用**二 **类比&#xff1a;**三 **基本使用示例** Matplotlib是一个用于绘制二维图形的Python库&#xff0c;广泛应用于数据可视化领域。其灵活性和强大的功能使得用户能够轻松创建各种类型的图表&#xff0c;包括折线图、散点图、…

RectMask2D的合批情况验证

1.经过实际测试&#xff0c;RectMask2D在裁剪区域完全相同且位置完全重合的情况下能够合批 但是当RectMask2D位置不重合时&#xff0c;就不能合批 注意&#xff0c;虽然此处被RectMask2D裁剪了&#xff0c;但是有部分是被渲染的&#xff0c;在计算深度时属于需要渲染…