携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情
InlfuxDB是一种高性能查询和存储的时序性数据库。
时间序列数据
时间序列数据如同历史烙印,具有不变性、唯一性和时间排序性。
时间序列数据是基于时间的一系列数据。在有时间的坐标中将这些数据点连成线,往过去看可以做成多纬度报表,揭示其趋势性、规律性、异常性;往未来看可以做大数据分析,机器学习,实现预测和预警。
时序型数据库
时序数据库就是存放事件序列数据的数据库,需要支持时序数据的快速写入、持久化、多维度的聚合查询等基本功能。
\
\
时序型数据库排名:db-engines.com/en/ranking/…
数据写入
-
写入平稳、持续、高并发和高吞吐:时序数据的写入是比较平稳的,这点与应用数据不同,应用数据通常与应用的访问量成正比,而应用的访问量通常存在波峰波谷。时序数据的产生通常是以一个固定的时间频率产生,不会受其他因素的制约,其数据生成的速度是相对比较平稳的。\
-
写多读少:时序数据上95%-99%的操作都是写操作,是典型的写多读少的数据。这与其数据特性相关,例如监控数据,你的监控项可能很多,但是你真正去读的可能比较少,通常只会关心几个特定的关键指标或者在特定的场景下才会去读数据。\
-
实时写入、无更新:时序数据的写入是实时的,且每次写入都是最近生成的数据,这与其数据生成的特点相关,因为其数据生成是随着时间推进的,而新生成的数据会实时的进行写入。数据写入无更新,在时间这个维度上,随着时间的推进,每次数据都是新数据,不会存在旧数据的更新,不过不排除人为的对数据做订正。\
数据查询
-
按时间范围读取:通常来说,你不会去关心某个特定点的数据,而是一段时间的数据。\
-
最近的数据被读取的概率高\
-
历史数据粗粒度查询的概率高\
-
多种精度查询\
-
多维度分析\
数据存储
-
数据量大:拿监控数据来举例,如果我们采集的监控数据的时间间隔是1s,那一个监控项每天会产生86400个数据点,若有10000个监控项,则一天就会产生864000000个数据点。在物联网场景下,这个数字会更大。整个数据的规模,是TB甚至是PB级的。\
-
冷热分明:时序数据有非常典型的冷热特征,越是历史的数据,被查询和分析的概率越低。 具有时效性:时序数据具有时效性,数据通常会有一个保存周期,超过这个保存周期的数据可以认为是失效的,可以被回收。一方面是因为越是历史的数据,可利用的价值越低;另一方面是为了节省存储成本,低价值的数据可以被清理。\
-
多精度数据存储:在查询的特点里提到时序数据出于存储成本和查询效率的考虑,会需要一个多精度的查询,同样也需要一个多精度数据的存储。\
基本概念
-
metric: 度量,相当于关系型数据库中的table。\
-
data point: 数据点,相当于关系型数据库中的row。\
-
timestamp:时间戳,代表数据点产生的时间。\
-
field: 度量下的不同字段。比如位置这个度量具有经度和纬度两个field。一般情况下存放的是会随着时间戳的变化而变化的数据。\
-
tag: 标签,或者附加信息。一般存放的是并不随着时间戳变化的属性信息。timestamp加上所有的tags可以认为是table的primary key。\
InfluxDB
InfluxDB是一个由InfluxData开发的开源时序型数据库。它由Go写成,着力于高性能地查询与存储时序型数据。
\
\
InfluxDB主要有以上图中的几个概念:Point,Measurement,Tags,Fields,Timestamp,Series,下面依次简单介绍下每个概念的含义。
-
Database:InfluxDB可以创建数据库,一个数据库可以包含多个user、保存策略、schemaless ,支持随时灵活创建mersurement;\
-
Measurement:相当于表的概念;\
-
Tags:是一些kv的结构,标签会被用来建立索引;\
-
Fields:是保存真实数据的结构,也是kv结构,但是不会被用来建立索引;\
-
Point: 代表了一条记录,可以理解为关系型数据库中的一条记录;\
-
Timestamp:既然InfluxDB被称之为时序数据库,少了时间是不可能的,每条记录必须要有一个时间戳;\
-
Series:是由Measurement+Tags组成的\
优点
InfluxDB 自带的各种特殊函数如求标准差,随机取样数据,统计数据变化比等,使数据统计和实时分析变得十分方便。 此外它还有如下特性:
-
内置 HTTP 接口,使用方便\
-
数据可以打标记,这样查询可以很灵活\
-
类 SQL 的查询语句\
-
安装管理很简单,并且读写数据很高效\
-
能够实时查询,数据在写入时被索引后就能够被立即查出\
TICK
TICK 是由 InfluxData 开发的一套运维工具栈,由 Telegraf, InfluxDB, Chronograf, Kapacitor 四个工具的首字母组成。
这一套组件将 收集数据和入库、数据库、绘图、告警四者囊括了。
\
\
Telegraf是一个数据收集和入库的工具。提供了很多 input 和 output 插件,比如收集本地的 cpu、load、网络流量等数据,然后写入 InfluxDB 或者 Kafka 等。
Chronograf绘图工具,有点是绑定了 Kapacitor,目前大多数选择了成熟很多的 Grafana。
Kapacitor 是 InfluxData 家的告警工具,通过读取 InfluxDB 中的数据,根据 DLS 类型配置 TickScript 来进行告警。
集群版
InfluxDB本身是支持集群化的,但是开源的不支持。InfluxDB在0.12版本开始不再开源cluster源码,而是被用作提供商业服务。
\
\
目前官方开源的InfluxDB-Relay采用的是双写模式,仅仅解决数据备份的问题,并为解决influxdb的读写性能问题。
即使是单机版,其性能也足以支撑大部分业务。
2.0
InfluxDB目前推出了2.0版本,由于改动较大,所以和1.x版本并存。目前官方推荐的 稳定版本依旧是1.x版本。2.0主要的更改包括以下内容:
-
集成了TICK组件,一键安装\
-
安全集成,所有的请求都需要通过token\
-
集成管理页面,支持更为强大的统计和分析功能\
-
支持新的查询语言Flux,提供更为强大的查询和处理功能\
-
增加了面向IoT和边缘计算的功能,能够在 ingestion point 汇总和分析时间序列数据\
-
启动了新的存储引擎InfluxDB Iox,采用Rust语言编写