简单纪要:influxdb浅谈!
一、初识Influxdb
🎯 InfluxDB是一个由InfluxData开发的开源时序型数据库,它由Go写成,着力于高性能地查询与存储的时序型数据库。InfluxDB被广泛应用于存储系统的监控数据,实时动态数据分析等场景。
优点:高性能地查询与存储的时序型数据库
1、golang编写, 没有其他依赖;
2、为时间序列数据库专门编写的自定义高性能数据存储(TSM引擎具有高性能的写入和数据压缩);
3、支持类sql查询语句;
4、tag可以索引序列化,提供快速有效的查询;
5、时序型数据库,可以支持min, max, sum, count, mean,median 一系列函数,方便统计;
二、Influxdb 概念介绍
三、Influxdb基本操作
2.0之前:支持sql语法 curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT \"value\" FROM \"cpu_load_short\" WHERE \"region\"='us-west'" 2.0之后:支持flux from(bucket:"example-bucket") |> range(start: -15m) |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system" and r.cpu == "cpu-total" )
四、Influxdb 存储原理
🎯 InfluxDB的存储结构树是时间结构合并树(Time-Structured Merge Tree,TSM),它是由日志结构化合并树(Log-Structured Merge Tree,LSM),根据实际需求变化而来的。
A:LSM树包含三部分:Memtable,Immutable和SSTable。
Memtable:
MemTable是在内存中的数据结构,用于保存最近更新的数据,会按照Key有序地组织这些数据,LSM树对于具体如何组织有序地组织数据并没有明确的数据结构定义,例如Hbase使跳跃表来保证内存中key的有序。
因为数据暂时保存在内存中,内存并不是可靠存储,如果断电会丢失数据,因此通常会通过WAL(Write-ahead logging,预写式日志)的方式来保证数据的可靠性。
Immutable:
当 MemTable达到一定大小后,会转化成Immutable MemTable。Immutable MemTable是将转MemTable变为SSTable的一种中间状态。写操作由新的MemTable处理,在转存过程中不阻塞数据更新操作。
SSTable:
有序键值对集合,是LSM树组在磁盘中的数据结构。为了加快SSTable的读取,可以通过建立key的索引以及布隆过滤器来加快key的查找。
B:TSM存储引擎主要包括四部分:Cache,WAL,TSM File,Compactor。下图中shard与TSM引擎主要部分放在一起,但其实shard在是TSM存储引擎之上的一个概念。在 InfluxDB 中按照数据产生的时间范围,会创建不同的shard分组,每个 shard 都有本身的 cache、wal、tsm file 以及 compactor。
五、TICK架构分析
🎯 TICK架构 是 InfluxData 平台的组件的集合首字母缩写,该集合包 括Telegraf、InfluxDB、Chronograf和 Kapacitor。TICK架构以及各组件分工情况如图所示:
除了上图可视化管理工具Chronograf外,还有一种可视化工具Grafana,它也是用于大规模指标数据的可视化展示,提供包括折线图,饼图,仪表盘等多种监控数据可视化UI,若应用过程中考虑到扩展性问题,也会使用Grafana代替Chronograf。
官方文档:
https://docs.influxdata.com/influxdb/v2.0/reference/syntax/flux/flux-vs-influxql/#influxql-and-flux-parity