本次分享来自社区贡献者田原 。
随着物联网的普及和工业技术的不断发展,高效管理海量时间序列的需求越来越广泛,数据量越来越庞大。时间序列主要分为两种,即单元时间序列和多元时间序列。单元时间序列是指一个具有单个时间相关变量的序列,单元时间序列只包含一列时间戳和一列值。多元时间序列是指一个具有多个时间相关变量的序列,多元时间序列包含多个一元时间序列作为分量,各个一元时间序列的采样时间点相同,所以数据可以用矩阵形式表示,每行为一个时间点,每列为一个一元时间序列。
1.时序数据库分类
当前主流的时序数据库存储引擎大多数都只支持一种时间序列模型(单元或多元),我们可以按照时序数据库是单元时间序列存储引擎,还是多元时间序列存储引擎对其进行分类
单元时间序列存储引擎
该存储引擎将每个时间序列独立存储,写入物理磁盘的时候,会对应两列数据,一列是时间戳列,一列是值列,两者一一对应。这种存储引擎适用于各个传感器独立采集的场景每个传感器采集的数据具有独立的时间戳。
基于已有的键值数据库构建的时序数据库基本都属于这一类,如 KairosDB 和 OpenTSDB 等。还有部分原生时序数据库的存储引擎也属于这一类,如 InfluxDB 和 Prometheus 等。
0.12及以前版本的 Apache IoTDB 的存储引擎和文件格式也只支持单元序列,无法高效的存储和查询多元时间序列。
多元时间序列存储引擎
该存储引擎将多个时间序列共享存储一列时间戳列,此外,每个时间序列再单独存储一列值列。一列时间戳列对应多个值列。这种存储引擎适用于多个传感器同时采集的场景,如在实际生产环境中,数据的收集粒度是设备级别的,一个设备下的多个传感器的值对应同一个时间戳。
基于已有的关系型数据库构建的时序数据库基本都属于这一类,将一个设备下所有序列建模成一张表,时间列只存在一列,典型的像 TimescaleDB 。少部分原生时序数据库的存储引擎也采用多元时间序列模型构建存储引擎,如 TDengine。
最近也有一款基于 Prometheus 开发的多元时间序列存储引擎 Heracles ,该存储引擎目前只是一个原型系统,并未合入 Prometheus主代码分支。除