不停机迁移,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.mfbz.cn/a/346129.html

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

相关文章

基于EfficientNet(B0-B7)全系列不同参数量级模型开发构建中草药图像识别分析系统,实验量化对比不同模型性能

EfficientNet系列的模型在我们前面开发识别类项目或者是检测类项目都是比较少去使用的&#xff0c;一方面是技术本身迭代发展的速度是比较快的&#xff0c;可能新的东西还没学习更新的东西就出来了&#xff0c;另一方面是EfficientNet本身实际业务使用度并不高&#xff0c;可能…

C++ STL之deque的理解及使用

文章目录 1. 介绍2. 实现原理&#xff08;简单理解&#xff09;3. deque的优缺点4. deque类的使用4.1 deque类对象的构造函数4.2 deque类对象的容量操作4.3 deque类对象的修改操作4.4 deque类对象的访问及遍历操作 1. 介绍 deque(双端队列)&#xff1a;是一种双开口的连续空间的…

UCAS-AOD遥感旋转目标检测数据集——基于YOLOv8obb,map50已达96.7%

1.UCAS-AOD简介 1.1数据说明 遥感图像&#xff0c;又名高分辨率遥感图像。遥感图像的分类依据是根据成像的介质不同来进行分类的。UCAS-AOD (Zhu et al.&#xff0c;2015)用于飞机和汽车的检测&#xff0c;包含飞机与汽车2类样本以及一定数量的反例样本&#xff08;背景&…

第4章 面向对象(下)

4.1 继承 4.1.1 继承的概念 在现实生活中&#xff0c;继承一般指的是子女继承父辈的财产。在程序中&#xff0c;继承描述的是事物之间的所属关系&#xff0c;通过继承可以使多种事物之间形成一种关系体系。例如&#xff0c;猫和狗都属于动物&#xff0c;程序中便可以描述为猫…

2017年认证杯SPSSPRO杯数学建模C题(第二阶段)移动端考研产品的春天真的到来了吗全过程文档及程序

2017年认证杯SPSSPRO杯数学建模 C题 移动端考研产品的春天真的到来了吗 原题再现&#xff1a; 2017 年的全国硕士研究生招生考试共有 201 万人报名参加&#xff0c;比去年增加了 24 万名考生&#xff0c;增加 13.56%。看起来新一轮的考研热潮即将到来&#xff0c;而考研教学和…

JAVA工程中引用本地jar的3种常用方式,你用过哪种?

文章目录 前言1. 第1种方式2. 第2种方式3. 第3种方式 前言 实际项目过程中咱们经常会碰到需要本地引用jar包到java工程中的场景&#xff0c;本文就介绍一下遇到此场景时如何在IDEA中导入本地jar包到工程中的3种方式&#xff0c;简单却很常用。 1. 第1种方式 IDEA -> File …

MySQL函数—流程函数

MySQL函数—流程函数&#xff1a;用于实现条件筛选&#xff0c;从而题搞语句的效率。 MySQL函数—流程函数 函数功能IF(value,t,f)如果value为true&#xff0c;则返回t&#xff0c;否则返回fIFNULL(value1,value2)如果value1不为空&#xff0c;返回value1&#xff0c;否则返回v…

单点登陆(SSO)基于CAS实现前后端分离的SSO系统开发「IDP发起」

关于其他前端常见登录实现单点登录方案&#xff0c;请见「前端常见登录实现方案 单点登录方案 」 前沿 单点登录&#xff08;SSO&#xff09;&#xff0c;英文全称为 Single Sign On。 SSO 是指在多个应用系统中&#xff0c;用户只需要登录一次&#xff0c;就可以访问所有相互…

分布变化下的Test-Time adaption 综述

论文 https://arxiv.org/abs/2303.15361 代码 https://github.com/tim-learn/awesome-test-time-adaptation &#xff08;其实这是相关领域代码和论文合集之类的东西&#xff09; Abstract 机器学习方法努力在训练过程中获得一个鲁棒模型&#xff0c;即使在分布变化的情况下…

RDMA vs InfiniBand 网卡接口如何区分?

(该架构图来源于参考文献) 高性能计算网络&#xff0c;RoCE vs. InfiniBand该怎么选&#xff1f; 新 RoCEv2 标准可实现 RDMA 路由在第三层以太网网络中的传输。RoCEv2 规范将用以太网链路层上的 IP 报头和 UDP 报头替代 InfiniBand 网络层。这样&#xff0c;就可以在基于 IP…

向日葵远程控制Mac版权限设置教程解决远程无法控制问题

很多Mac新手安装向日葵远程控制Mac版后&#xff0c;根据提示设置了权限后发现无法远程控制&#xff0c;其实主要是你只勾选了中文的“向日葵权限选项“&#xff0c;而忘记了勾选了向日葵另外一个英文选项权限。 判断是否完全开启控制权限 打开向日葵访问权限设置面板&#xf…

gitlab runner 安装、注册、配置、使用

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Unity Mask合批情况验证

1.首先是两个Mask完全重合的情况下 每张图片使用的image都来自同一个图集 发现彼此之间是没有合批的&#xff0c;但是每个Mask内部是实现了合批的 经过计算此种情况的visiableList&#xff1a;mask1&#xff0c;IM1&#xff0c;IM2&#xff0c;mask2&#xff0c;IM3&#xf…

实时渲染 -- 光追(Ray Tracing)

光栅化 Or 光线追踪 传统的光栅化方式主要是将每个物体进行光栅化后形成若干个像素&#xff0c;然后每个像素需要计算光源直接照射到自己并反射回眼睛而形成的颜色。这种算法方式是极快的&#xff0c;但是只能表示直接光照&#xff0c;图像质量较低。 Bling-Phong 模型是一个常…

Java 集合List相关面试题

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于java面试题系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基…

IDEA插件(MyBatis Log Free)

引言 在Java开发中&#xff0c;MyBatis 是一款广泛使用的持久层框架&#xff0c;它简化了SQL映射并提供了强大的数据访问能力。为了更好地调试和优化MyBatis应用中的SQL语句执行&#xff0c;一款名为 MyBatis Log Free 的 IntelliJ IDEA 插件应运而生。这款插件旨在帮助开发者…

2023-2024年重庆职业院校技能大赛“信息安全管理与评估”比赛样题

2023 年重庆职业院校技能大赛&#xff08;高等职业教育&#xff09; “信息安全管理与评估”样题任务书 第一阶段&#xff1a;任务 1 网络平台搭建&#xff08;50 分&#xff09;任务 2 网络安全设备配置与防护&#xff08;250 分&#xff09; 第二阶段&#xff1a;第一部分 网…

C语言王道练习题第七周两题

第一题 Description 输入一个学生的学号&#xff0c;姓名&#xff0c;性别&#xff0c;用结构体存储&#xff0c;通过 scanf 读取后&#xff0c;然后再 通过 printf 打印输出 Input 学号&#xff0c;姓名&#xff0c;性别&#xff0c;例如输入 101 xiongda m Output 输出…

Linux系统Shell脚本编程之条件语句

一、条件测试 Shell 环境根据命令执行后的返回状态值 " $? " 来判断是否执行成功&#xff0c;当返回值为0时表示成功&#xff0c;否则表示失败或异常&#xff08;非0值&#xff09;。使用专门的测试工具 test 命令&#xff0c;可以对特定条件进行测试&#xff0c;并…

【Vue3】组件通信

Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所有的东西&#xff0c;合并到$attrs中了。$children被砍掉了。 1. props 若 父传子&#xff1a;属性值是非函数。若 子传父&…