如何处理人际关系浅谈InfluxDB的存储体系与数据保留策略(retentionpolicy)雷霆万钧的意思
前⾔
在之前的中,笔者介绍了⽤时序数据库InfluxDB作为Flink监控存储的⽅法,并且提到为了防⽌磁盘爆掉,要设置保留策略来使数据⾃动过期。经过⼀点探究之后,发现“Retention Policy”这个词在InfluxDB⾥并不只是字⾯意思那么简单,本⽂做个简要记录。
InfluxDB的存储体系
之前说过,InfluxDB的存储引擎是由LSM Tree改进⽽来的TSM(Time-Structured Merge)Tree引擎,所以它和LSM Tree有⼀些相似之处。hierarchy图⽰如下。
Shard
Shard类似于HBa的Region和Kudu的Tablet,是数据编码、存储、写⼊和读取的交互单元。它由如下⼏部分组成:
cherylcole
WAL(预写⽇志,相当于HLog)
杭州英孚教育
Cache(写缓存,相当于MemStore)nootbook
TSM File(数据存储⽂件,相当于HFile)
TSI/TSI File(内存中的倒排索引及磁盘上的索引⽂件,⽅便查询)
stocks另外当然也有负责Flush、Compaction的逻辑。
需要注意,InfluxDB在存储数据时,是根据ries(即measurement与tag t的⼀个唯⼀组合)的哈希值来决定落在哪个Shard中的,哈希分桶数——即Shard的数⽬——在商⽤版中可以调整。这样就使得ries相同的数据落在相同的Shard⾥,有利于提⾼查询效率。同时也会使⼀个Shard中可能包含多个measurement的数据(相对地,⼀个HBa Region只会包含⼀张表的数据),有利于负载均衡。
Shard Group
Shard Group是⼀个逻辑概念,顾名思义,它就是包含多个Shard的组合。Shard Group的重要特性是时间分区性,即每个Shard Group 只会存储⼀段时间内的数据,各个Shard Group对应的时间区间不会交叉。时序数据库上的查询⼏乎全都会带有时间维度的过滤条
件,Shard Group按时间区间的组织形式可以很⾼效地实现partition pruning,另外也⽅便下⽂所说的数据过期。
Retention Policy (RP)
在的Glossary中,对Retention Policy⼀词的定义如下:
The part of InfluxDB’s data structure that describes for how long InfluxDB keeps data (duration), how many copies of tho data are stored in the cluster (replication factor), and the time range covered by shard groups (shard group duration). RPs are unique per databa and along with the measurement and tag t define a ries.
可见,InfluxDB的保留策略除了描述数据的TTL duration之外,还包含数据的副本数(replication factor),以及每个Shard Group的时间区间长度,信息量很⼤。注意InfluxDB的保留策略不是定义在表上的,⽽是定义在数据库上的,并且以Shard Group为单位做批量过期。
另外,每个数据库可以配置多种不同的保留策略,但是默认的只能有⼀个,数据写⼊时也只能选择⼀个保留策略(其实是保留策略下⾯的Shard Group)作为⽬的地。下⾯简单介绍⼀下保留策略的配置。
保留策略的配置
在数据库上创建保留策略的语法如下。
CREATE RETENTION POLICY <retention_policy_name> ON <databa_name>
DURATION <duration>
REPLICATION <replication_num>
[SHARD DURATION <shard_duration>] [DEFAULT]
其中:
<retention_policy_name>是保留策略的名称;
<databa_name>是数据库的名称;
<duration>是数据的TTL;
软科2021中国排名<replication_num>是数据的副本数;
<shard_duration>是可选项,表⽰每个Shard Group的时间区间长度;
DEFAULT也是可选项,如果指定,表⽰将此策略顺便设为默认。
因为用英语怎么说如果不指定shard duration的话,当duration⼩于2天时,shard duration默认为1⼩时;duration介于2天和6个⽉之间时,shard duration默认为1天;duration⼤于6个⽉时,shard duration默认为7天。
创建数据库时,默认会随着创建⼀个名为autogen的保留策略,shard duration为7天,⽽duration为0秒(即永远不过期)。
> USE flink_metrics
Using databa flink_metrics
mfa
> SHOW RETENTION POLICIES
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
fungusautogen 0s 168h0m0s 1 true
接下来创建⼀个新的TTL为⼀周的保留策略,并设为默认,再观察⼀下。
> CREATE RETENTION POLICY "one_week" ON "flink_metrics" DURATION 7d REPLICATION 1 D
EFAULT
> SHOW RETENTION POLICIES
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 fal
one_week 168h0m0s 24h0m0s 1 true
如果需要修改或者删除保留策略,可以采⽤ALTER RETENTION POLICY和DROP RETENTION POLICY语法,不再赘述。The End