面对这样的状况,清华大学于 2015 年启动了 IoTDB 的研制。2020 年 9 月 23 日 Apache IoTDB 毕业成为 Apache 顶级项目 (Top-Level Project),是目前唯一由我国高校发起的 Apache 基金会顶级项目,也是 Apache 基金会旗下唯一物联网数据管理领域开源项目。2021 年 10 月,Apache IoTDB 核心团队创立了天谋科技,继续运营 IoTDB,帮助工业用户解决数据 “存、查、用” 难题。
对于 Apache IoTDB 研发的核心技术,几位参与者联合发表了一篇综述论文,对于 IoTDB 的设计进行了详细而完整的阐述。文章以一个需要管理上万台挖掘机的工业公司入手,描述了需求 “数据首先被打包到设备中,然后通过 5G 移动网络发送到服务器。在服务器中,数据被写入时间序列数据库,用于 OLTP 查询。最后,数据科学家可以将数据从数据库加载到大数据平台,用于复杂的分析和预测,即 OLAP 任务。”
- 论文地址:https://dl.acm.org/doi/abs/10.1145/3589775
- 项目地址:https://github.com/apache/iotdb
论文重点讲述了如下几个部分:
1. 数据模型的设计:时间序列在逻辑层次上的组织方式和在物理模式中的存储;
2. TsFile 文件格式:自研的列式存储文件格式,同时满足写入、查询等的高效性;
3. IoTDB 引擎:主要包括存储引擎、查询引擎等;
4. 分布式解决方案。
接下来,对这几个重点部分做出更加详细的解读。
详细解读
1. 数据模型设计
(1)如下图,采用树的结构,满足极高强度的写入操作,并能够有效处理物联网场景中常见的延迟数据到达问题。
在树中,每一个叶子节点对应一个传感器,每个传感器都有其对应的归属设备,正如图中最下面两层所示,向上同理。
(2)前文阐述了逻辑结构,现在我们来看物理结构的实现,主要为时间序列 ( Time series )和序列簇( Series family )两部分组成。下图展现了每个时间序列是由时间和值两个属性组成,时间序列通过根节点到叶子节点的完整路径来定位。上图中则展示了序列簇的概念,一个序列簇中可能包含多个设备,它们的数据将一起存储在 TsFile(一种文件结构,在后文中会讲解)中。
2. TsFile 文件格式的设计
TsFile 是 Apache IoTDB 自研列式存储文件格式。结构如下图:
TsFile 在设计过程中,研究团队主要解决的问题:
- 节省空间,尽可能压缩数据
- 减少文件数量
- 会一起查询的时间序列在物理位置上的接近
- 减少磁盘碎片
- 高效访问
主要给出的解决方案:
- 列式存储:消除了空值,节省了磁盘占用;数据访问局部性
- 时间序列编码:利用物联网场景时间序列的独特特征
- 频域编码:信号处理中广泛进行时间序列的频域分析
- 具体的结构解析:页面( Page )是基本存储单位,Chunk 中包含多个 Page,一个 chunk 中的 page 属于同一个时间序列,大小可变;Chunk Group 包含多个 Chunk,一个组中的多个 chunk 属于同一段时间内写入的一个或多个系列的设备,将他们放在连续的磁盘空间,是因为他们经常会被一起查询;Block 是在内存中的,写入的块组先在内存中进行缓冲,当内存达到阈值时,将所有块组刷新到 TsFile 中;索引(FileIndex)于文件末尾记录信息,用于数据访问。
3.IoTDB 引擎
在这部分,研究者们主要考虑了物联网场景下的延迟到达、高效查询处理、类 SQL 查询的设计。IoTDB 引擎结构如下图:
图中我们可以看到主要是用于处理 TsFile 的写入、读取、和管理的存储引擎部分,在这部分中运用了自动延迟分离技术(如下图):
对于大多数都在正常的 TsFile 中,没有时间范围重叠时,推荐使用延迟数据分离;对于大多数数据是无序的情况,延迟数据分离则不被推荐使用。
另一重要组成是查询引擎,这部分负责将 SQL 查询转换为可在数据库中执行的操作符。同时,为了适应工业物联网场景,Apache IoTDB 设计了对时间序列数据的丰富查询。
4. 分布式的解决方案
TsFile 可以分布在 HDFS 中,并由 Spark 操作。此外还提供了更好的数据分布和查询处理的原生解决方案,主要为分区复制、NB-Raft 复制和 DYNAMIC 读一致性。
对比结果
论文中提供了 TsFile 与 IoTDB 分别与工业中广泛使用的最先进的文件格式和时序数据库的比较结果,展现了 Apache IoTDB 在多个方面的优势,如下图:
以上两张图,展现了 TsFile 在写吞吐量、读取时间成本、同步的性能上,均优于目前广泛使用的方案。这主要是由于 TsFile 的物联网感知结构设计,避免了存储 deviceId 等冗余信息。而磁盘占用之所以没有明显优势,则是因为构建了更加精细的索引,导致占用了更多空间,但是这样的牺牲可以在查询时间上带来非凡的改善,我们可以看到读取时间成本的明显优势。
上图中可以看到 IoTDB 在几乎所有测试中都表现出更好的性能,更高的写吞吐量和更低的写延迟。
在上图的实验中,我们可以看到,当查询数据规模较大时,IoTDB 具有更好的性能,IoTDB 的优势在大规模数据聚合中尤为显著。
总结
该论文介绍了一款新的时序数据管理系统 Apache IoTDB ,其开放式架构专门设计用于支持物联网应用的实时查询和大数据分析。该系统包括一个新的时序文件格式,TsFile ,采用列存储的方式存储时间和值,以避免空值并实现有效的压缩。在 TsFile 的基础上,IoTDB 引擎采用类似 LSM 树的策略来处理极高强度的写入,并处理在物联网场景中非常普遍的延迟数据到达。丰富的可扩展查询,以及在 TsFile 中预计算的统计信息,使 IoTDB 能够在 OLTP 和 OLAP 任务中实现高效处理。
基于上述的这些技术,IoTDB 已经成为能够更好面对工业物联网场景的新型数据库。