InfluxDB学习(四):InfluxDB数据库retention、shard、shardgroup

一. retention policy(pr)

数据保留策略提供了一个简单高效的方法用来清除InfluxDB数据库中的过期数据,一旦数据超过过期时间,数据会自动从InfluxDB中清除,而过期数据清除的时间单位以shard group的duration为单位

Influx中每个新建的数据库都会有一个对应的数据保留策略(retention policy),该策略用来管理该数据库中的数据过期时间,如果没有指定策略,那么该数据库会有一个默认的策略,如下所示

> create database db01
> show retention policies on db01
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true

新建一个数据库时,也会自动创建一个默认的策略“autogen”,duration表示该数据的过期时间,0s表示永不过期。

创建retention policy的语句如下:

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]

该参数依次为 

<retention_policy_name>:保留策略名称

<database_name>:为哪个数据库创建保留策略

<duration>:该保留策略对应的数据过期时间

<REPLICATION>:复制因子,开源的InfluxDB单机环境永远为1

<SHARD DURATION>:分片组的默认时长

DEFAULT:是否为默认策略,如果是,就代替数据库的默认策略“autogen”

例如,我们创建一个过期时间为24h的保留策略

> create retention policy store_24h on db01 duration 24h replication 1

 此时db01数据库除了一个默认的保留策略“autogen”外,还有一个我们新建的保留策略,这里需要注意的是,一个数据库的保留策略可以有多个,但是只能有一个是默认的。

> show retention policies on db01
name      duration shardGroupDuration replicaN default
----      -------- ------------------ -------- -------
autogen   0s       168h0m0s           1        true
store_24h 24h0m0s  1h0m0s             1        false

 修改一个数据库的默认保留策略,语法格式为:

> ALTER RETENTION POLICY "what_is_time" ON "NOAA_water_database" DURATION 3w SHARD DURATION 2h DEFAULT

 将刚才新建的保留策略设置为db01的默认策略

> alter retention policy "store_24h" on "db01" default
> show retention policies on db01
name      duration shardGroupDuration replicaN default
----      -------- ------------------ -------- -------
autogen   0s       168h0m0s           1        false
store_24h 24h0m0s  1h0m0s             1        true

 以后存入db01数据库的数据仅仅保留一天,即24个小时。

二. shard

shard是InfluxDB存储引擎的实现,负责数据的编码存储、读写服务等。将InfluxDB中时间序列化的数据按照时间的先后顺序存入到shard中,每个shard中都负责InfluxDB中一部分的数据存储工作,并以tsm文件的表现形式存储在物理磁盘上,每个存放了数据的shard都属于一个shard group。

三. shard group

shard group可以理解为存放shard的容器,所有的shard在逻辑上都属于这个shard group,每个shard group中的shard都有一个对应的时间跨度和过期时间,每一个shard group都有一个默认的时间跨度,叫做shard group duration

Retention Policy’s DURATIONShard Group Duration
< 2 days 1 hour
>= 2 days and <= 6 months 1 day
> 6 months 7 days

三. 三者之间的关系

在一个RP中,如果指定的保留时间为24小时,那么每个shard的duration为1小时,即每个shard的时间跨度为1小时,那么总共会有24个跨度为1小时的shard,在触发数据的RP后,删除最早时间跨度的shard。

例如,我们在mydb数据库中指定保留策略为24小时

> show retention policies on mydb
name          duration shardGroupDuration replicaN default
----          -------- ------------------ -------- -------
autogen       0s       168h0m0s           1        false
keep_24_hours 24h0m0s  1h0m0s             1        true

那么此时shard group中对应就会存在24个shard,每次到达过期时间时,删除最早的shard,并生成一个新的shard

> show shard groups
name: shard groups
id database  retention_policy start_time           end_time             expiry_time
-- --------  ---------------- ----------           --------             -----------
1 mydb      keep_24_hours    2020-04-24T19:00:00Z 2020-04-24T20:00:00Z 2020-04-25T20:00:00Z
2 mydb      keep_24_hours    2020-04-24T20:00:00Z 2020-04-24T21:00:00Z 2020-04-25T21:00:00Z
3 mydb      keep_24_hours    2020-04-24T21:00:00Z 2020-04-24T22:00:00Z 2020-04-25T22:00:00Z
4 mydb      keep_24_hours    2020-04-24T22:00:00Z 2020-04-24T23:00:00Z 2020-04-25T23:00:00Z
5 mydb      keep_24_hours    2020-04-24T23:00:00Z 2020-04-25T00:00:00Z 2020-04-26T00:00:00Z
6 mydb      keep_24_hours    2020-04-25T00:00:00Z 2020-04-25T01:00:00Z 2020-04-26T01:00:00Z
7 mydb      keep_24_hours    2020-04-25T01:00:00Z 2020-04-25T02:00:00Z 2020-04-26T02:00:00Z
8 mydb      keep_24_hours    2020-04-25T02:00:00Z 2020-04-25T03:00:00Z 2020-04-26T03:00:00Z
9 mydb      keep_24_hours    2020-04-25T03:00:00Z 2020-04-25T04:00:00Z 2020-04-26T04:00:00Z
10 mydb      keep_24_hours    2020-04-25T04:00:00Z 2020-04-25T05:00:00Z 2020-04-26T05:00:00Z
11 mydb      keep_24_hours    2020-04-25T05:00:00Z 2020-04-25T06:00:00Z 2020-04-26T06:00:00Z
12 mydb      keep_24_hours    2020-04-25T06:00:00Z 2020-04-25T07:00:00Z 2020-04-26T07:00:00Z
13 mydb      keep_24_hours    2020-04-25T07:00:00Z 2020-04-25T08:00:00Z 2020-04-26T08:00:00Z
14 mydb      keep_24_hours    2020-04-25T08:00:00Z 2020-04-25T09:00:00Z 2020-04-26T09:00:00Z
15 mydb      keep_24_hours    2020-04-25T09:00:00Z 2020-04-25T10:00:00Z 2020-04-26T10:00:00Z
16 mydb      keep_24_hours    2020-04-25T10:00:00Z 2020-04-25T11:00:00Z 2020-04-26T11:00:00Z
17 mydb      keep_24_hours    2020-04-25T11:00:00Z 2020-04-25T12:00:00Z 2020-04-26T12:00:00Z
18 mydb      keep_24_hours    2020-04-25T12:00:00Z 2020-04-25T13:00:00Z 2020-04-26T13:00:00Z
29 mydb      keep_24_hours    2020-04-25T13:00:00Z 2020-04-25T14:00:00Z 2020-04-26T14:00:00Z
20 mydb      keep_24_hours    2020-04-25T14:00:00Z 2020-04-25T15:00:00Z 2020-04-26T15:00:00Z
21 mydb      keep_24_hours    2020-04-25T15:00:00Z 2020-04-25T16:00:00Z 2020-04-26T16:00:00Z
22 mydb      keep_24_hours    2020-04-25T16:00:00Z 2020-04-25T17:00:00Z 2020-04-26T17:00:00Z
23 mydb      keep_24_hours    2020-04-25T17:00:00Z 2020-04-25T18:00:00Z 2020-04-26T17:00:00Z
24 mydb      keep_24_hours    2020-04-25T18:00:00Z 2020-04-25T19:00:00Z 2020-04-26T17:00:00Z
原文地址:https://www.cnblogs.com/ilifeilong/p/12746149.html