研一在实验室航天微服务项目的开发中,需要引入时序数据库进行日志数据的存取,本文档是对时序数据库的调研。
一、时序数据
时序数据即时间序列数据,指按照时间先后顺序变化、带时间标签的数据,具有以下特征:
- 采样频率快
- 测点多信息量大
- 数据按照时间顺序产生,一经产生不再变化
- 没有关系数据的并发写入/更改情况
- 单点数据价值小,对数据一致性要求没有业务数据严格
二、时序数据库
与传统关系型数据库相比,时序数据库:
- 不仅记录了数据的当前值,而且记录了所有的历史数据(相当于关系型数据库+时间戳键值,但后者仅能应对少量的数据)
- 应对海量时序数据点的并发写入(批量写入,先写入内存,再周期性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: