时序数据库IoTDB如何快速高效地存储时序数据

一、IoTDB 1.0新架构介绍

时序数据库IoTDB的新架构旨在实现两个主要目标:在资源充足的场景下提供无上限的服务潜力,以及在资源有限的场景下提供最佳选择。新架构的系统目标包括:

  1. ‌支持多模式‌:同时支持单机模式和分布式模式。
  2. ‌大容量‌:可管理上亿设备和测点,数据量无上限。
  3. ‌高可用性‌:能够容忍部分节点失效,实现系统高可用。
  4. ‌高扩展性‌:随时进行集群扩容,平滑过渡到更大规模的集群。
  5. ‌高性能‌:写入吞吐达到数千万点每秒。
  6. ‌可观测性‌:对系统集群的核心性能进行监控。

IoTDB集群包括两个角色:

  • ‌ConfigNode‌:管理集群节点和分区表信息,负责任务调度和负载均衡。
  • ‌DataNode‌:负责数据存储和查询,管理时间序列数据和元数据,MPP计算引擎运行在DataNode之上。

架构还包括与Spark、Flink、RocketMQ等大数据生态的对接接口。

部署模式包括:

  • ‌单机模式‌:适用于对扩展性和高可用性要求不高,但对性能要求非常高的用户。
  • ‌分布式模式‌:包括高可用、高性能和强一致性模式,适用于有高度扩展性和高可用需求的用户。

二、时间序列数据文件存储格式TsFile

TsFile是IoTDB自研的文件数据结构,磁盘占用空间相比InfluxDB可降低85%。

TsFile的数据存储结构

  • ‌ChunkGroup‌:代表设备一段时间的数据存储块。
  • ‌Chunk‌:代表物理量一段时间的数据,分为TSChunk(时间和值都在同一个Chunk中)、TimeChunk(时间和值分开存储)。
  • ‌Page‌:代表物理量一段时间的数据,多个Page可以组合成一个Chunk。

索引结构

  • ‌序列内索引‌:分为Page级、Chunk级和文件级,用于快速过滤数据块,减少查询时的IO和物化。
  • ‌序列间索引‌:在TsFile尾部,分为设备层、测点层,用于快速定位具体需要查询的序列。

数据类型和压缩方式

TsFile支持多种数据类型和编码压缩方式,包括INT32、INT64、FLOAT、DOUBLE等,以及TS_2DIFF、SPRINTZ等新的编码算法。二次压缩默认使用LZ4算法,还支持GZIP、ZSTD等算法。

死区处理算法SDT

通过丢掉一些不重要的、重复的点,实现极致压缩。

加载外部TsFile功能

在资源受限的场景下,可以通过TsFile的API直接写入数据,再通过SQL命令加载到IoTDB集群中。

三、IoTDB存储引擎架构IoTLSM

IoTLSM存储引擎架构包括写前日志WAL、顺乱序数据判断机制、内存缓冲区、顺序空间和乱序空间等部分。

分离存储流程

  • ‌顺序数据‌:直接写到数据空间内。
  • ‌乱序数据‌:写到乱序数据空间,后台进行合并。

合并机制

  • ‌空间内合并‌:减少查询IO,提升索引速度,优化文件系统。
  • ‌跨空间合并‌:将乱序空间内的磁盘文件合并到顺序空间内,提升乱序数据查询效率。

内存数据管理

使用内存对象池Array Pool管理内存存储单元,减少内存对象的初始化和垃圾回收过程,支持数据类型动态调整。

相关推荐
冬奇Lab20 小时前
一天一个开源项目(第248篇):CleanYourTV —— 让 AI 编程助手通过 Wi-Fi 给安卓电视去广告、换上 Apple TV 风格主屏
开源·资讯
程序员清风20 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
wflynn20 小时前
GitHub 今日推荐|gpu-unlock-ada:Ada 显卡张量算力翻倍解锁
开源·github·c
正在走向自律21 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵21 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
CarIise21 小时前
SpringMVC 异常处理与拦截器
大数据·spring
独隅1 天前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
_孤傲_1 天前
快速掌握 MySQL 语法
数据库·后端·mysql
SL_staff1 天前
JVS私有化文档系统上线避坑指南:5大运维与业务协同断点及检测加固实践
java·开源·全栈
橙露1 天前
git简明教程以及资源分享
大数据·git