什么是时序数据库

按照时间顺序,设备状态的变化数据依时间顺序记录的数据库。

Time series DB

比如CPU的利用率,某一时间的环境温度等,时序数据是以时间作为主要的查询维度,通常会将连续的多个时序数据绘制成线,制作基于时间的多维度报表,用于揭示数据背后的趋势,规律和异常,进行实时在线的预测和预警。

时序数据普遍存储在IT,devops,物联网,车联网等系统。

时序数据具有以下三个特点:

数据是随着时间追加的,无更新数据

数据通常按照时间顺序抵达

时间是一个主要的坐标轴

 

时序数据库则是存放时序数据的专用数据库,并且支持时序数据的快速写入,持久化和多维度的实时聚合运算等功能。

相比于传统数据库通常记录数据的当前值,时序数据库则记录所有的历史数据,在处理当前时序数据库的时候,有需要不断的接收新的时序数据,同时时序数据的查询又是以时间为基础的查询条件,并且专注于解决海量数据场景的问题。

时序数据的写入:支持千万级/秒 的写入

时序数据的读取:支持千万级/秒 的聚合和查询

成本敏感:海量数据存储带来的是成本问题,如何以更低的成本存储这些数据是时序数据库需要解决的关键问题。

 

InfluxDB是遵循开源协议MIT,但是集群功能是商业的时序数据库。具有如下特点:

高性能读写

高效压缩存储和实时计算分析的能力

 成本优势明显

部署简单,无系统环境的依赖,使用方便

无模式的数据模型灵活强大

原生HTTP管理接口 免插件配置和免第三方依赖

无需额外的软件依赖(仅使用GO语言)

提供类似于SQL的查询语句,接口友好,学习成本低,上手快

拥有丰富的聚合运算(avg,min,max,sum等函数)和数据采样的能力

提供灵活的数据保留策略*(retention policy)来设置数据的保留时间和副本数

保障数据可靠性的同时,能及时的删除过期数据 释放存储空间

提供灵活的连续查询(continuous query)来实现海量数据的采样

丰富的权限管理功能,可以精细到表级别

支持多种通信协议(HTTP UDP)

兼容多种开源的时序数据库 如CollectD,Graphite,OpenTSDB,Prometheus

有开源集成的软件套件TICK(Telegraf  influxDB Chronograf Kapacitor)

其中的InfluxDB则专注于时序数据场景的高性能时序性数据库,支持灵活的自定义保留策略和类SQL的操作接口 。

influxDB通过实现高度可扩展的数据接收和数据粗出引擎 可以高效的实时接收,存储查询和可视化显示和执行预定义操作。它通过连续查询提升查询效率和缩短延迟,通过数据保留策略 及时高效地删除过期的冷数据 提升存储效率。

与InfluxDB相比,通用的数据库Cassandra,MongoDB,Hbase等则需要开发人员投入大量的时间进行代码的编写,通过开发达到与InfluxDB类似的功能,

需要做一下工作;

编写代码实现跨集群数据分片的功能,聚合运算和数据采样,数据生命周期的管理功能

实现丰富的API接口

编写用于数据采集的工具

实现实时处理模块并编写数据监控和报警的功能 

编写可视化引擎以向用户显示时序数据

Influx的竞品:

Elasticsearch:针对搜索设计的系统,对于时序数据查询慢有5-10倍的差距,占用磁盘大有5倍更多的磁盘

 

MongoDB:面向文档的数据库 MongoDB的时序数据由标签kv和时间戳组成,MongoDB需要做专门的配置用于支持时序数据 效率低,

相比MongoDB,influxDB的写性能是MongoDB的2.4倍,存储效率是MongoDB的20倍,查询效率大约是MongoDB的5.7倍

 

OpenTSDB:由Java语言编写的分布式扩展的时序数据库,构建与Hbase之上。

相比OpenTSDB,influxDB的写性能是OpenTSDB的5倍,存储效率是OpenTSDB的16.5倍,查询效率大约是OpenTSDB的3.65倍

OpenTSDB的设计初衷主要是用于生产仪表图,不是为了满足任意的查询,也不是为了存储数据。没有提供完整的查询语言,OpenTSDB支持毫秒的粒度,虽则亚毫秒的操作普及,有时会出现精度不足的问题。

 

广泛应用于:

devops监控

IoT物联网监控

实时分析场景

 

Influx的核心概念:

时间time

表Measurement

标签tag

指标field

时序记录数据point

保留策略 retention policy

时序:series 表示表名 保留策略和标签集都相同的一组数据

 

参考:

https://docs.influxdata.com/influxdb/v2.0/