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

相关推荐
大数据张老师11 分钟前
用 AI 做数据分析:从“数字”里挖“规律”
大数据·人工智能
婪苏(Python学习ing)27 分钟前
MySQL 与 Redis 基础入门:从安装到核心操作
数据库
幻灭行度1 小时前
通过redis_exporter监控redis cluster
数据库·redis·缓存
Wang's Blog1 小时前
Nestjs框架: 基于Mongodb的多租户功能集成和优化
数据库·mongodb·多租户
博闻录2 小时前
以 “有机” 重构增长:云集从电商平台到健康生活社区的跃迁
大数据·重构·生活
Edingbrugh.南空2 小时前
Aerospike架构深度解析:打造web级分布式应用的理想数据库
数据库·架构
DisonTangor2 小时前
Mistral AI开源 Magistral-Small-2507
人工智能·语言模型·开源·aigc
Cxzzzzzzzzzz3 小时前
数据库索引详解:原理、设计原则与应用场景
数据库·mysql
nbsaas-boot3 小时前
收银系统优惠功能架构:可扩展设计指南(含可扩展性思路与落地细节)
java·大数据·运维
Alla T3 小时前
【通识】数据库
数据库·oracle