本篇文章主要介绍InfluxDB的基本概念以及Meta信息的组成,代码基于1.7版本。
基本概念
首先看一下InfluxDB的一些基本概念。
InfluxDB主要有以上图中的几个概念:Point,Measurement,Tags,Fields,Timestamp,Series,下面依次简单介绍下每个概念的含义。
- Database:InfluxDB可以创建数据库,一个数据库可以包含多个user、保存策略等,schemaless ,支持随时灵活创建mersurement;
- Measurement:相当于表的概念;
- Tags:是一些kv的结构,标签会被用来建立索引;
- Fields:是保存真实数据的结构,也是kv结构,但是不会被用来建立索引;
- Point: 代表了一条记录,可以理解为关系型数据库中的一条记录;
- Timestamp:既然InfluxDB被称之为时序数据库,少了时间是不可能的,每条记录必须要有一个时间戳;
- Series:是由Measurement+Tags组成的
Meta信息
那么这些基本概念在InfluxDB代码中是怎么体现的呢?首先上图,一图胜千言。
可以看到,meta主要包含一些元信息,主要包含如下几个部分:
- database信息:meta信息中包含了一个database的数组,包括了所有的database信息。
- RetentionPolicy:数据过期策略。包含数据过期时间,副本数(单机无用),shardGroup Duration;
- ShardGroupInfo:分片组。包含时间范围[start, end),删除时间,截断时间;
- ShardInfo:分片。owners,所属节点,单机无用;
- ShardGroupDuration:决定了一个ShardGroup内部数据时间的最大差;
- Duration:决定了这个RetentionPolic的数据的过期时间;
- ContinuousQuery:持续的query,有点类似预处理。
- ShardGroupInfo:分片组。包含时间范围[start, end),删除时间,截断时间;
- RetentionPolicy:数据过期策略。包含数据过期时间,副本数(单机无用),shardGroup Duration;
- user信息:包含用户名,密码的hash,是否为管理员,以及授予的权限
- raft协议同步所需信息:(暂不展开)
- Term
- Index
其关系可以用下面这张图展示:
数据过期删除策略
Shard Group是InfluxDB中一个重要的逻辑概念,从字面意思来看Shard Group会包含多个Shard,每个Shard Group只存储指定时间段的数据,不同Shard Group对应的时间段不会重合。比如2017年9月份的数据落在Shard Group0上,2017年10月份的数据落在Shard Group1上。
- 过期策略,过期是直接整个shardGroup删除,一个shard对应多个TSM Files。
- 当shardGroup的end+过期时间小于当前时间,就会shardGroup就会被当成过期的并被清理掉。
- 每个Shard Group对应多长时间是通过Retention Policy中字段”SHARD DURATION”指定的,如果没有指定,也可以通过Retention Duration(数据过期时间)计算出来,两者的对应关系为: