简介
InfluxDB是用Go语言编写的一个开源时序型数据库,使用时无需外部依赖,用于存储大量带有时间戳的数据。特别适合大型分布式系统的监控系统,存储日志和监控数据,简单理解为按时间序列记录一些数据(常用的指标数据、统计数据等)。
主要特点
- 数据无结构(无模式):列的数量可以任意
- 支持min, max, sum, count, mean, median等一系列聚合函数
- 原生的HTTP支持,内置HTTP API
- 强大的类SQL语法
- 自带管理界面,方便使用
注意:自带管理界面与集群功能在1.2版之后,将不再提供。
名词解释
- database — 数据库,同传统数据库中的数据库概念
- measurement — 数据表,同传统数据库中的table概念
- point — 数据表里的一行数据,由time(时间戳)、tag(标签)、field(数据)组成。详细如下表:
time(时间戳) 每条数据的记录时间,是数据库中的主索引(可以自动生成)
tag(标签) 有索引的值:如系统名称、服务名称等,”key-value”形式。其中表名+tag构成索引。
field(字段、数据) 没有索引的记录值:如耗时,是否成功等,”key-value”形式。
注意:
- 在influxdb中,field字段必须存在。field是没有索引的,如果使用field中字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。
- tag是可选的,但是强烈建议适度使用,因为tag是有索引的,tag相当于SQL中的有索引的列。tag value只能是string类型。
- series — 序列,一些数据的集合。在同一个 database 中,retention policy、measurement、tags完全相同的数据同属于一个 series,同一个 series的数据在物理上会按照时间顺序排列存储在一起。
举个简单的例子,service_record的数据如下:
service_record的series如下:
- retention policy — 数据保留策略,定义数据保留的时长,可以当作清理策略使用。每个数据库可以有多个数据保留策略,但只能有一个默认策略。
- shard
shard 和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复;
例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。
存储组件
TSM 存储引擎主要由几个部分组成: cache、wal、tsm file、compactor。
Cache
cache 相当于是 LSM Tree 中的 memtable。插入数据时,实际上是同时往 cache 与 wal 中写入数据,可以认为 cache 是 wal 文件中的数据在内存中的缓存。当 Infl