一. 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 DURATION | Shard 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