时序数据库双存储引擎技术解析

随着物联网的蓬勃发展和工业技术的不断进步,管理海量时间序列数据的需求日益迫切。时间序列数据主要分为单元时间序列和多元时间序列两类。单元时间序列仅含单一时间相关变量,而多元时间序列则包含多个时间相关变量,且这些变量的采样时间点相同,因此数据能以矩阵形式展现。

时序数据库存储引擎分类

目前主流的时序数据库存储引擎主要分为支持单元时间序列和多元时间序列两大类。

  • 单元时间序列存储引擎‌:独立存储每个时间序列,数据以时间戳列和值列对应形式写入磁盘。这类引擎适用于传感器独立采集数据的场景。典型代表有KairosDB、OpenTSDB、InfluxDB和Prometheus等。

  • 多元时间序列存储引擎‌:多个时间序列共享一列时间戳,每个时间序列再单独存储一列值列。适用于多个传感器同时采集的场景,如设备级别数据收集。TimescaleDB和TDengine等属于此类。

Apache IoTDB的双存储引擎创新

Apache IoTDB自0.13版本起,引入了双存储引擎架构,兼顾单元时间序列和多元时间序列的存储需求。

  • 双存储引擎架构‌:存储引擎向上为查询引擎提供标准化数据访问,向下与存储介质交互,完成数据读写。双存储引擎的区别在于是否共享时间戳列,以适应不同业务场景。

  • 数据模型设计‌:创新元数据模型,允许用户通过API指定多元时间序列是否共享时间戳,同时保持对原有数据模型的兼容性。存储引擎的指定粒度设在设备级别,提高使用灵活性。

性能对比
  • 写入性能与磁盘占用‌:测试显示,当多元时间序列分量数超过1时,共享时间戳存储引擎的持久化速度平均比单元时间序列快1.6倍。磁盘占用方面,分量数多于1时,多元时间序列因共享时间戳而显著节省空间,最多可减少约50%的磁盘占用。

  • 查询性能‌:

    • 不带值过滤的原始数据查询‌:多元时间序列因少读时间列和减少值列对齐操作,查询速度平均快62.2%。
    • 带值过滤的原始数据查询‌:在不同选择率和空值比例下,多元时间序列查询性能平均优于单元时间序列,特别是在高选择率和低空值比例时,性能提升可达40%。
    • 降采样查询‌:多元时间序列在查询多个分量时表现更佳,但查询单分量时略逊于单元时间序列。
应用场景总结
  • 单元时间序列‌:适用于单分量场景,写入持久化速度快,磁盘占用少,查询性能略优。
  • 多元时间序列‌:分量数大于1且空值比例低时,写入持久化速度提升显著,磁盘空间节省近半,查询性能在多分量场景下优于单元时间序列。

Apache IoTDB的双存储引擎架构为高效管理海量时间序列数据提供了创新解决方案,满足了不同业务场景的多样化需求。

相关推荐
冬奇Lab3 小时前
每日一个开源项目(第149篇):RAG-Anything - 把图片、表格、公式当成一等公民的多模态 RAG 框架
人工智能·开源
这个DBA有点耶6 小时前
NULL不是空——数据库里最反直觉的设计,90%新人踩过的坑
数据库·mysql·代码规范
Databend7 小时前
2KB histogram 背后:Databend 如何低成本追踪长尾延迟
大数据·数据分析·agent
这个DBA有点耶8 小时前
AI写的SQL跑崩了生产库,这锅谁背?
数据库·人工智能·程序员
镜舟科技8 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
Databend9 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent
ClouGence12 小时前
SQL Server CDC 能放到 Always On 备库读吗?一文讲透原理与实践
数据库·sql server
太阳之子13 小时前
给你的 AI Agent 装一双"能上网冲浪"的眼睛
开源
冬奇Lab1 天前
每日一个开源项目(第148篇):obsidian-skills - Obsidian CEO 亲写的 AI Agent 格式规范,让 Agent 不再破坏你的 Vault
人工智能·开源·资讯
先吃饱再说1 天前
存储的进化:从 MySQL 到浏览器缓存,数据到底住在哪?
数据库