InfluxDB每秒可以处理成千上万条数据,要将这些数据全部保存下来会占用大量的存储空间,有时我们可能并不需要将所有历史数据进行存储并且InfluxDB本身不提供数据的删除操作,因此,InfluxDB推出了数据保留策略RP(Retention Policies),用来让我们自定义数据的保留时间。
创建RP
当执行create database时,会创建一个名叫autogen的retention policy,duration=0 表示它会永久保留数据。
> create database testdb
> use testdb
Using database testdb
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
可以通过create retention policy的命令来创建一个新的retention policy
CREATE RETENTION POLICY "one_month" ON "testdb" DURATION 30d REPLICATION 1 DEFAULT
其中:
- one_month:策略名
- testdb:具体的数据库名
- 30d:保存 30 天,30 天之前的数据将被删除,它具有各种时间参数,比如:h(小时),w(星期)
- REPLICATION 1:副本个数,这里填 1 就可以了
- DEFAULT 设为默认的策略
- shardGroupDuration :表示一个shard文件所存的数据的时间跨度
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
one_month 720h0m0s 24h0m0s 1 true
PS : 如果切换数据库的retention policy的话,已有的数据会被全部删掉。
shardGroupDuration的取值:
更新RP
使用alter retention policy语句更新
> alter retention policy autogen on mydb duration 30d REPLICATION 1 SHARD DURATION 1d default
> show retention policies
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 720h0m0s 24h0m0s 1 true
删除RP
DROP RETENTION POLICY "rp_name" ON "db_name"
retention policy使用建议
对于retention policy,最好的方式是在创建数据库时就考虑清楚数据要保留多长时间。
比如,可以通过下面的方式创建一个保留30天的数据库,并且,influxdb还会自动生成一个比较合理的shardGroupDuration,此时是1天。
> create database testdb2 with duration 30d
> show retention policies on testdb2
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 720h0m0s 24h0m0s 1 true