时序数据库调研

研一在实验室航天微服务项目的开发中,需要引入时序数据库进行日志数据的存取,本文档是对时序数据库的调研。

一、时序数据

时序数据即时间序列数据,指按照时间先后顺序变化、带时间标签的数据,具有以下特征:

  • 采样频率快
  • 测点多信息量大
  • 数据按照时间顺序产生,一经产生不再变化
  • 没有关系数据的并发写入/更改情况
  • 单点数据价值小,对数据一致性要求没有业务数据严格

二、时序数据库

与传统关系型数据库相比,时序数据库:

  • 不仅记录了数据的当前值,而且记录了所有的历史数据(相当于关系型数据库+时间戳键值,但后者仅能应对少量的数据)
  • 应对海量时序数据点的并发写入(批量写入,先写入内存,再周期性dump为不可变文件存储)
  • 支持查询时的海量数据分组聚合运算
  • 利用时间递增、维度重复、指标平滑变化特性,提高数据压缩比,存储成本低

如上图是时序数据库的一般结构:

  • metric:度量,相当于关系型数据库的table
  • data point:数据点,相当于关系型数据库的row
  • timestamp:时间戳,代表数据点产生的时间
  • field:数据字段,一般存放随时间戳变化而变化的数据
  • tag:标签,索引列,标识数据点来源的属性信息,一般不随时间戳变化
    • timestamp加上所有的tags构成primary key
    • 具有相同的tagset值的数据点构成一条series曲线,横坐标为时间轴

三、InfluxDB

1. 概述

目前开源时序数据库中排名第一的是InfluxDB:

  • 提供HTTP接口
  • 支持类SQL查询,传统数据库使用者上手更快
  • 安装管理简单
  • 字段属性可动态扩充,比于传统关系型数据库更灵活
  • 存储空间占用低(针对不同数据类型采用不同的压缩算法)
  • 读写性能高(TSM tree优化)
  • 支持高速的海量数据分组聚合运算
序号 对比数据库 写入速度 读取速度 存储空间占用
1 Cassandra 快4.5倍 快45倍 少2.1倍
2 Elasticsearch 快6.1倍 快8.2倍 少2.5倍
3 MongoDB 快2.4倍 快5.7倍 少20倍
4 OpenTSDB 快5倍 快3.64~4倍 少16.5倍

引自 徐化岩,初彦龙.基于influxDB的工业时序数据库引擎设计[J].计算机应用与软件,2019,36(09):33-36+40.

2. 存储结构

  • database:数据库,可在这一层级做读写权限控制和数据保留时间
  • measurement:表,包含time,tags和fields三种字段
  • tag:索引字段
  • field:数据字段,通常随时间变化
  • point:红色的一行就是一个数据点,每个point由time+n个tag定位

3. 实例尝试

如下图所示的三个红框内的列设定为tag字段,因为其不随时间变化,余下的content和processId为field字段。

利用InfluxDB提供的分组聚合函数,查询符合条件且最近的三条point:

文章作者: Moon Lou
文章链接: https://loumoon.github.io/2020/05/12/时序数据库调研/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Moon's Blog