influxdb的retention policy

定义

The part of InfluxDB’s data structure that describes for how long InfluxDB keeps data (duration), how many copies of this data is stored in the cluster (replication factor), and the time range covered by shard groups (shard group duration). RPs are unique per database and along with the measurement and tag set define a series.

下面简单谈一下我对这句话的理解。retention policy描述了influxdb中的数据会保留多长时间、数据保留几个副本(开源版的只能保留一个副本),以及每个shard保存多长时间的数据。每个influxdb数据库都有一个独立的retention policy。这里面涉及到几个基本概念,下面描述一下。

  • DURATION:这个描述了保留策略要保留多久的数据。这个机制对于时序型的数据来讲,是非常有用的。
  • SHARD:这个是实际存储influxdb数据的单元。每个shard保留一个时间片的数据,默认是7天。如果你保存1年的数据,那么influxdb会把连续7天的数据放到一个shard中,使用好多个shard来保存数据。
  • SHARD DURATION:这个描述了每个shard存放多数据的时间片是多大。默认7天。需要注意的是,当数据超出了保留策略后,influxdb并不是按照数据点的时间一点一点删除的,而是会删除整个shard group。
  • SHARD GROUP:顾名思义,这个一个shard group包含多个shard。对于开源版的influxdb,这个其实没有什么区别,可以简单理解为一个shard group只包含一个shard,但对于企业版的多节点集群模式来讲,一个shard group可以包含不同节点上的不同shard,这使得influxdb可以保存更多的数据。
  • SHARD REPLICATION:这个描述了每个shard有几个副本。对于开源版来讲,只支持单副本,对于企业版来讲,每个shard可以冗余存储,这样可以避免单点故障。

关于SHARD DURATION

influxdb官方建议,如果保留期限低于2天,shard duration设置为1h,如果保留期限位于2天到6个月之间,shard duration设置为1d,如果保留期限大于6个月,shard duration设置为7d,

创建retention policy

当执行create database时,会创建一个名叫autogen的retention policy,它会永久保留数据

> 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

然后再查看一下retention policy

> show retention policies
name      duration shardGroupDuration replicaN default
----      -------- ------------------ -------- -------
autogen   0s       168h0m0s           1        false
one_month 720h0m0s 24h0m0s            1        true

需要注意的是,如果切换数据库的retention policy的话,已有的数据会被全部删掉。

更新retention policy

如果想修改retention policy的数据保留时间,可以使用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

更新retention policy的保留时间的话,数据不会全部丢失。

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

参考资料

https://docs.influxdata.com/influxdb/v1.7/query_language/database_management/

https://stackoverflow.com/questions/41620595/how-to-set-default-retention-policy-and-duration-for-influxdb-via-configuration

https://dzone.com/articles/simplifying-influxdb-shards-and-retention-policies

https://stackoverflow.com/questions/39878027/influxdb-whats-shard-group-duration

你可能感兴趣的:(中间件大杂烩)