InfluxDB数据库retention、shard、shardgroup
一、retention policy(PR)
数据保留策略提供了一个简单高效的方法来清除influxdb数据库中过期数据,一旦数据超过过期时间,数据会自动从influxdb中清除,而过期数据清除的时间单位以"shard group的duration"为单位。
influxdb每个新建的数据库都会有一个对应的数据保留策略(retention policy),该策略用来管理数据库中数据过期时间,如果没有指定策略,数据库会有默认的策略autogen,如下:
> SHOW RETENTION POLICIES ON peers_status 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 yoon duration 24h replication 1
此时yoon数据库除了一个默认的保留策略"autogen"外,还有一个我们新建的保留策略,这里需要注意的是,一个数据库的保留策略可以有多个,但是只能有一个是"默认"的。
> show retention policies on yoon name duration shardGroupDuration replicaN default ---- -------- ------------------ -------- ------- autogen 0s 168h0m0s 1 true store_24h 24h0m0s 1h0m0s 1 false
修改一个数据库的默认保留策略,语法格式为:
> ALTER RETENTION POLICY "store_24h" ON "yoon" DURATION 3w SHARD DURATION 2h DEFAULT
二、shard
shard 是influxdb存储引擎的实现,负责数据的编码存储、读写服务等。将infuxdb中时间序列化的数据按照时间的先后顺序存入到shard中,每个shard都负责influxdb中一部分的数据存储工作,并以
tsm文件的表现形式存储在物理磁盘上,每个存放了数据的shard都属于一个shard group。
三、shard group
shard group 可以理解为存放shard的容器,所有的shard逻辑上都属于shard group,每个shard group 中的shard都有一个对应的时间跨度和过期时间,每个shard group都有一个默认的时间跨度
,叫做 shard group duration。
四、retention、shard、shardgroup 三者之间的关系
在一个retention policy(PR)中,如果指定保留时间为24小时,那么每个shard的duration为1小时,即每个shard的时间跨度为1个小时,那么总共有24个时间跨度为1小时的shard,在触发数据的PR
后,删除最早的时间跨度的shard。
那么此时shard group 中对应的就会存在24个shard,每次到达过期时间,就会删除最早的shard,并生成一个新的shard。