什么是时序数据库
按照时间顺序,设备状态的变化数据依时间顺序记录的数据库。
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 表示表名 保留策略和标签集都相同的一组数据
参考: