IoTDB 常见问题 QA 第二期

关于 IoTDB 的 Q&A

IoTDB Q&A 第二期来啦~我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题“小百科”,方便大家使用 IoTDB。

Q1:集群扩容方法

outside_default.png

问题

问题1:当 IoTDB 集群的存储占用达到多少时,建议增加节点?是等到存储完全满,还是达到一半时就进行扩容?如果集群存储已满,是否需要手动进行数据清理,比如设置 TTL,还是可以直接忽略,只增加节点即可?

问题2:目前使用三台服务器构建的集群配置了元数据 3 副本和数据 2 副本。现在想要将一年前的数据迁移到其他服务器上以释放空间,这个操作应该如何执行?

outside_default.png

方案

(1)数据清理与扩容建议

  • 自动数据清理:可以通过配置 TTL 自动清理过期数据,实现存储空间的自动回收。

  • 扩容时机:建议根据集群存储资源的使用趋势和业务数据增长预期来决定扩容时机。一般而言,当存储利用率接近高水位线(例如 70%-80%)时,应考虑扩容以确保服务稳定性,而不是等到存储完全占满。

  • 存储满时处理:若集群存储空间已满,建议优先通过设置 TTL 或其他方式清理无用数据。在此基础上,可以根据需求增加集群节点以提升存储能力。

(2)存储扩展方法

  • 扩展磁盘:在当前集群负载正常的情况下,可以通过增加磁盘容量来扩展存储资源。IoTDB 支持多盘目录配置,可以灵活扩展存储能力。

(3)历史数据迁移操作

  • 数据迁移步骤:对于需要迁移的历史数据,可以利用 IoTDB 的数据同步功能,将一年前的数据迁移至其他集群或服务器进行备份。

  • 释放存储空间:迁移完成后,在当前集群中通过 TTL 配置清理已迁移的历史数据,从而释放存储空间。

  • 操作注意事项:在进行数据迁移之前,确保目标服务器或集群具备足够的存储资源,并对迁移的关键步骤进行备份和测试,以确保数据安全和完整性。

Q2:GC 时间过长导致集群卡住

outside_default.png

问题

1. 我们的业务系统在 IoTDB 执行 GC 时遭遇了查询和写入操作的短暂卡顿。此外,IoTDB 在运行一段时间后,老年代内存占用过高,即使在停止大量写入操作后仅进行查询,内存回收仍然不力。大约 4 至 5 天后,系统会记录此日志,并在此期间变得卡顿。虽然可以通过定时重启来缓解,但我们想寻求避免重启的解决方案。

bd40066c3099275fd2c0421246786212.png

系统环境:

  • Java 版本:openjdk version "1.8.0_222-ea";

  • 测点数量:352130;

  • DataNode MEMORY_SIZE:42G;

  • 部署方式:单机部署

2. 我们观察到 IoTDB 的 GC 时间过长,是否需要增加内存?当前使用的是 JDK 11 版本。

Accumulated GC time within current observation window: 10810 ms;WARN o.a.i.c.s.m.GcTimeAlerter:42 - Gc Time Percentage: 45%

3. 在 IoTDB 1.3.2 版本和 JDK 17 环境下,我们的 130 GB 内存数据节点在处理 1.06 亿条时序数据时,GC 操作导致系统挂起。

outside_default.png

问题分析

  • GC 耗时高: 垃圾回收(GC)过程耗时过长,影响了系统性能。

  • 内存占用高: 系统内存占用过高,导致内存回收不力,影响系统稳定性。

outside_default.png

解决方案

1. 增加内存:考虑增加物理内存以缓解内存压力。

2. 更新数据库:将 IoTDB 更新到最新版本,以利用可能的性能改进。

3. 更新 JDK 并更换 GC 算法:

    • G1:适用于低停顿时间的用户场景。根据当前系统的运行情况收集性能监控信息,动态调整参数,以提供最合适的停顿时间或最大的吞吐量。

    • PS:适用于需要高吞吐量的用户场景。

4. 优化查询操作:避免执行查询操作的查询范围过大。

5. 关闭最新点缓存:如果没有查询最新点的需求可以关闭最新点缓存(enable_last_cache)以释放内存。

Q3:如何修改测点类型

outside_default.png

问题

1. 如果在数据插入时未指定属性值的类型,而后期需要将原本推断为 INT32 类型的数据强制转换为 TEXT 类型,应如何处理?

2. 如果字段类型不支持直接修改,是否有其他方案可以实现字段类型的调整?

3. 如何将设备某个属性的类型从 TEXT 更改为 LONG?

4. 如何修改已存在数据序列的字段类型,例如将原本为 FLOAT 类型的字段修改为 INT 类型?

5. 是否可以更改 timeseries 的数据类型,例如将 FLOAT 类型更改为 DOUBLE?

outside_default.png

原因

IoTDB 不支持修改已经创建测点的类型。

outside_default.png

方案

(1)如果不需要旧数据:

方案一:删除旧序列重新创建新元数据

删除旧序列,并在创建新元数据时手动指定目标数据类型,然后重新写入数据。

方案二:修改自动推断策略配置

删除旧序列,修改自动推断策略配置并重启服务,以实现自动创建新的目标类型元数据。

自动创建模式配置:

####################
### Configurations for creating schema automatically
####################


# Whether creating schema automatically is enabled
# If true, then create database and timeseries automatically when not exists in insertion
# Or else, user need to create database and timeseries before insertion.
# effectiveMode: hot_reload
# Datatype: boolean
enable_auto_create_schema=true


# ALL data types: BOOLEAN, INT32, INT64, FLOAT, DOUBLE, TEXT


# register time series as which type when receiving boolean string "true" or "false"
# effectiveMode: hot_reload
# Datatype: TSDataType
# Options: BOOLEAN, TEXT
boolean_string_infer_type=BOOLEAN


# register time series as which type when receiving an integer string and using float or double may lose precision
# effectiveMode: hot_reload
# Datatype: TSDataType
# Options: DOUBLE, FLOAT, INT32, INT64, TEXT
integer_string_infer_type=DOUBLE


# register time series as which type when receiving a floating number string "6.7"
# effectiveMode: hot_reload
# Datatype: TSDataType
# Options: DOUBLE, FLOAT, TEXT
floating_string_infer_type=DOUBLE


# register time series as which type when receiving the Literal NaN.
# effectiveMode: hot_reload
# Datatype: TSDataType
# Options: DOUBLE, FLOAT, TEXT
nan_string_infer_type=DOUBLE

(2)如果需要旧数据:

1. 使用 Select into + Cast:具体支持的转换规则详见官方文档:内置函数与表达式章节(可点击阅读原文跳转)。

# 举例:将DOUBLE类型转成TEXT类型
select cast(L1_BidPrice as TEXT) into root.stock.Legacy.0700HK(L1_BidPrice_back) from root.stock.Legacy.0700HK

2. 导入导出工具:将数据导出 CSV 文件,修改类型后再重新导入目标类型一致的序列。

3. 自定义程序:

    • TsFile 重写:调用 TsFile 写入 API 重写 TsFile。

    • Session 数据重写:查询旧数据,修改为指定类型后再批量写入到新测点。

Q4:数据备份方案

outside_default.png

问题

1. 管理数万设备,若每天为每个设备创建备份,将产生海量备份文件。是否有除了文件导出之外的其他数据备份方案?

2. 想要实现整个 IoTDB 文件的备份,有哪些可行的方案?

3. IoTDB 是否提供了内置的备份和恢复工具?这些工具的使用文档在哪里可以找到?对于需要 24 小时不间断运行的系统,应如何进行数据备份?

4. 在尝试按天导出数据进行备份时,遇到了内存不足的错误。即使将配置文件中的内存大小从 10G 增加到 12G,问题依旧存在。

5. 如果查询本应返回无数据,却也报告内存不足,那么分批备份是否应该基于时间,还是根据测点数量预估内存?

outside_default.png

原因及方案

数据备份方案如下:

  • 物理备份(全量):使用本地升级备份工具(通过硬链接对原有数据进行备份),在执行备份之前,要确保系统已经停止运行。

./tools/backup.bat
./tools/backup.sh
  • 逻辑备份:利用 pipe 将数据备份到另外的节点。

    • IoTDB 备份:在 TsFile 文件级别进行备份,备份操作将在 TsFile 刷盘时同步。

    • TimechoDB 备份:采用实时同步与文件同步相结合的方式进行备份。

    • 恢复过程:通过反向开 pipe 写回数据,这些数据将被放入乱序区,随后系统将自动进行合并处理。

  • 多级存储备份:根据不同的时间范围,采用多级存储策略来备份数据。

  • 元信息和数据周期导出备份:

    • 导出时如果内存不足,则需要调大 DataNode 的内存或者分批导出。

    • 导出时会根据测点的数量来进行内存预估。建议按照设备分批导出,不推荐按照序列分批导出。

Q5:错误 - There are no available SchemaRegionGroup RegionGroups currently

outside_default.png

现象

  • 现象1:

a20ce5b78d5d61fc016130faa7f0661f.png

  • 现象2:系统遇到了一个持续增长的 schema_region 目录问题,导致频繁出现内存溢出(OutOfMemory)错误。在路径 data/datanode/consensus/schema_region 下,系统每分钟都会创建多个以“4747*”为模式的目录。目前有二十多个数据库,每次尝试重启数据库时,Java 虚拟机(JVM)就会报告内存不足的错误。

outside_default.png

原因

  • 自动扩展机制:在默认配置下,每个 DataBase 下的 Region 数量是在既定可控范围内的。默认配置下每个数据库将根据其数据量自动扩展 SchemaRegionGroup 和 DataRegionGroup。每个 DataNode 节点上最少会自动创建 1 个 SchemaRegionGroup ,而每个 DataNode 预期管理的 SchemaRegion 的最大数量为 1。每个 DataNode 节点上最少会创建 2 个 DataRegionGroup,预期管理的 DataRegions 的最大数量为 5。

  • DataBase 数量与 Region 关系:DataBase 的数量直接关系到 Region 的数量。例如,在 1C3D 的集群中,在 1 个 DataBase 下创建 n*100 个设备/测点,和在 n*100 个 DataBase 下分别创建 1 个测点,所创建的 Region 数量会有显著差异。每个 Region 至少会保留 32 MB 的 WAL Buffer,因此 Region 数量的增加会导致内存开销增大

  • 合理控制 Region 数量:DataRegion 作为副本组的基本单位,绑定了固定数量的内存和 CPU 线程资源(例如 WAL 的堆外内存、Memtable 的 flush 线程等)。因此,IoTDB 集群需要控制 DataRegion 的数量适中,避免因为 DataRegion 太少导致写入并行度下降、资源利用不充分,或因 DataRegion 太多导致线程数量爆炸、写入性能下降。

outside_default.png

方案

  • 降低内存使用量:通过降低各个模块的内存使用量,启动服务删除部分 DataBase 来恢复正常运行。

具体配置参数如下:

wal_buffer_size_in_byte=8388608
schema_region_ratis_log_appender_buffer_size_max=4194304

配置时可根据系统中的 DataRegion 数、SchemaRegion 数进行计算:wal_buffer_size_in_byte * DataRegion 数 + schema_region_ratis_log_appender_buffer_size_max * SchemaRegion 数 < OFF_HEAP_MEMORY * 0.8。

其中,保留 20% 堆外内存用于各模块中的临时使用。

  • 调整建模:修改建模方案,尽量保证所有的序列建立在一个 DataBase 下,避免 Region 数量过多。

规上企业应用实例

能源电力:中核武汉|国网信通产业集团|华润电力|大唐先一|上海电气国轩|清安储能|某储能厂商|太极股份

航天航空:中航机载共性|北邮一号卫星

钢铁、金属冶炼:宝武钢铁|中冶赛迪|中国恩菲

交通运输:中车四方|长安汽车|城建智控|德国铁路

智慧工厂与物联:PCB 龙头企业|博世力士乐|德国宝马|北斗智慧物联|京东|昆仑数据|怡养科技|绍兴安瑞思

29f6785fec56d02e686e6f9455f31bcf.gif

6924fed8746371e20c59bdda3e1ddeb8.jpeg

6abc6be27c8cdb2c840421b9fc1e49b3.jpeg

971fd60db8ab331c1c543d3476370211.jpeg

outside_default.png

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

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

相关文章

RT-DETR融合[CVPR2024]Starnet中的star block特征提取模块

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewrite-the-Stars/tree/main 论…

Java web - 后端开发

一 Maven Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Maven的作用

Unity学习笔记(二)如何制作角色动画

前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 创建一个角色 我们的目的是创建一个可移动、跳跃、冲刺等动作的角色 需要的组件&#xff1a;Rigidbody&#xff08;用于创建物理规则&#xff09;、Collider&#xff08;用于检测碰撞&am…

Pytest-Bdd-Playwright 系列教程(16):标准化JSON报告Gherkin格式命令行报告

Pytest-Bdd-Playwright 系列教程&#xff08;16&#xff09;&#xff1a;标准化JSON报告&Gherkin格式命令行报告 前言一、创建Feature文件二、创建步骤定义文件三、生成Cucumber格式的JSON报告四、使用Gherkin格式的命令行报告五、将BDD报告集成到Jenkins中总结 前言 在自动…

harbor镜像仓库搭建

Harbor简介 Harbor的发展背景和现状 Harbor项目起始于2014年左右,当时正值容器技术和微服务架构迅速崛起的时期。随着越来越多的企业开始采用容器化部署应用,对于私有镜像管理的需求也日益增长。传统的解决方案要么缺乏必要的企业级特性(如访问控制、安全性和可扩展性),…

Windows安装Jira

下载 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理员身份安装&#xff0c;否则弹出以下提醒 创建和配置MySQL数据库&#xff1a;参照 Connecting Jira applicat…

【企业微信自建应用-前端篇】企业微信自建应用开发流程详细介绍

前言 最近接到需求&#xff0c;需要我在企业微信端自建一个应用&#xff0c;用来接受PC端派发的工单&#xff0c;告警&#xff0c;公告等内容。 这里写一个帖子汇总一下我经历的全流程开发&#xff0c;当然这是基础的流程啊。因为功能要求也不高。后面如果开发更多的东西再补充…

[每周一更]-(第127期):Go新项目-Gin中使用超时中间件实战(11)

在项目不断迭代过程中&#xff0c;发现基础架构中&#xff0c;没有进行超时控制&#xff0c;有些接口由于网络延迟以及远程调用等情况存在请求时间过长的问题&#xff0c;消耗了资源&#xff0c;也降低了用户体验&#xff0c;这一讲我们聊下超时控制中间件&#xff0c;来完善我…

定时/延时任务-Kafka时间轮源码分析

文章目录 1. 概要2. TimingWheel2.1 核心参数2.2 添加任务2.3 推进时间 3. TimerTaskList3.1 添加节点3.2 删除节点3.3 刷新链表3.4 队列相关 4. 时间轮链表节点-TimerTaskEntry5. TimerTask6. Timer 和 SystemTimer - 设计降级逻辑7. 上层调用8. 小结 1. 概要 时间轮的文章&a…

【传感器技术】第6章 压电式传感器,压电材料,压电效应,电压放大器

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

端点鉴别、安全电子邮件、TLS

文章目录 端点鉴别鉴别协议ap 1.0——发送者直接发送一个报文表明身份鉴别协议ap 2.0——ap1.0 的基础上&#xff0c;接收者对报文的来源IP地址进行鉴别鉴别协议ap 3.0——使用秘密口令&#xff0c;口令为鉴别者和被鉴别者之间共享的秘密鉴别协议ap 3.1——对秘密口令进行加密&…

XDOJ 877 图的深度优先遍历

题目&#xff1a;图的深度优先遍历 问题描述 已知无向图的邻接矩阵&#xff0c;以该矩阵为基础&#xff0c;给出深度优先搜索遍历序列&#xff0c;并且给出该无向图的连通分量的个数。在遍历时&#xff0c;当有多个点可选时&#xff0c;优先选择编号小的顶点。&#xff08;即…

Spring--07-01---@Transactional注解失效的8大场景

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Transactiona1.默认回滚&#xff1a;RuntimeException 1.Transactional注解失效的8大场景1.数据库引擎是否支持事务3.方法不是public的4.自身调用5.数据源没有配置事…

拆解大语言模型RLHF中的PPO

** 拆解大语言模型RLHF中的PPO ** 参考链接&#xff1a;https://zhuanlan.zhihu.com/p/645225982 为什么大多数介绍RLHF的文章&#xff0c;一讲到PPO算法的细节就戛然而止了呢&#xff1f;要么直接略过&#xff0c;要么就只扔出一个PPO的链接。然而LLM PPO跟传统的PPO还是有…

【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)

【工业机器视觉】基于深度学习的仪表盘识读(读数识别)&#xff08;3&#xff09;-CSDN博客 训练与预测 Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO&#xff08;You Only Look Once&#xff09;架构的目标检测算法。YOLO是一种实时目标检测系统&#xff0c;它…

Qt Pro 常用配置

Part1: Summary Qt 开发中 Pro 文件的内容很多&#xff0c;需要不断的去学习和使用&#xff0c;现系统性的整理一下。以备录&#xff1b; 1.创建pro文件 1.1 步骤&#xff1a; Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为&…

ChatGPT生成测试用例的最佳实践(一)

前面介绍的案例主要展示了ChatGPT在功能、安全和性能测试用例生成方面的应用和成果。通过ChatGPT生成测试用例&#xff0c;测试团队不仅可以提升工作效率&#xff0c;还可以加快测试工作的速度&#xff0c;尽早发现被测系统中的问题。问题及早发现有助于提高软件的质量和用户满…

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…

欧科云链研究院:AI时代,如何证明“我是我”?

OKG Research&#xff5c;编辑 近日&#xff0c;OpenAI 发布了新模型 Sora。这是一款高性能的文本到多模态生成工具&#xff0c;支持从文本生成精细的图像和动态视频。 相较早先发布的视频样例&#xff0c;该功能目前已经可以由用户真实上手体验&#xff0c;目前由于服务过载…

【老白学 Java】日期 / 时间格式化

日期 / 时间格式化 文章来源&#xff1a;《Head First Java》修炼感悟。 本篇文章&#xff0c;老白把日期和时间的格式化参数进行了整理&#xff0c;方便以后查阅&#xff0c;更加详细的说明请参考 Java API 文档。 一、语法解释 %&#xff0c;必要参数&#xff0c;用于引用参…