时序数据库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管理内存存储单元,减少内存对象的初始化和垃圾回收过程,支持数据类型动态调整。

相关推荐
无名-CODING10 分钟前
Docker 部署 Redis:小白一键安装、配置与迁移教程
数据库·redis·bootstrap
无忧智库15 分钟前
破局与重构:基于“中台战略”的大型集团数字化转型深度解构(PPT)
大数据
IMPYLH21 分钟前
Linux 的 env 命令
linux·运维·服务器·数据库
fobwebs27 分钟前
如何通过phpmyadmin指令来优化数据库表,给数据库“减肥”。
数据库·wordpress·数据库优化·phpmyadmin
syinfo27 分钟前
oracle使用PLSQL导出表数据
数据库·oracle
客梦30 分钟前
数据库基础
数据库·笔记
老苏畅谈运维33 分钟前
Oracle AI Database 26ai 安装实战
数据库·oracle·oracle 26ai
Rick199333 分钟前
SQL优化
数据库·sql
沪漂阿龙33 分钟前
掌握MySQL这些函数,SQL水平直接起飞!
数据库·sql·mysql
无忧智库35 分钟前
破局与重构:基于“智慧大脑”的企业全面数据化经营深度解构(PPT)
数据库·重构