influxDB创建了保留策略是自动执行吗?
多个保留策咯是怎样进行操作的,系统默认策略和普通策略有什么区别?
创建数据库实例
CREATE DATABASE "dat_metrics";
创建存储策略
duration:保留策略的属性决定数据库中的数据保留期间。大于这个期间的数据将会被删除。
保留策略创建语法:
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
CREATE RETENTION POLICY "k2h_raw" ON "dat_metrics" DURATION 2h0m0s REPLICATION 1 DEFAULT;
CREATE RETENTION POLICY "k7d_s5m" ON "dat_metrics" DURATION 168h0m0s REPLICATION 1;
CREATE RETENTION POLICY "k90d_s30m" ON "dat_metrics" DURATION 2160h0m0s REPLICATION 1;
创建连续查询
CREATE CONTINUOUS QUERY bc_query_stat_sample_by_30m ON dat_metrics BEGIN SELECT last(*), mean(*), max(*), min(*) INTO dat_metrics.k90d_s30m.bc_query_stat FROM dat_metrics.k2h_raw.bc_query_stat GROUP BY time(30m), cloud_app_id, cloud_node_id, service END;
https://blog.csdn.net/d292222100/article/details/88965390
influxDB创建保留策略后会自动执行,如果保存策略RP的保留是90天,那么分片shard的时长在一天就比较合理,按照这种保留策略,每隔一天就会形成一个分片目录,存放一天的TSM数据,那么无论总数据量是百亿还是千亿,按照时间范围查询一定是先根据目录索引。如果你是influxdb集群,例如:8个节点,2个副本,相当于对一天的数据又切成了四分,也就是一个节点的某个分片目录只对应了1/4的数据,集群的分布这会让读写更快。
若你不创建自定义策略,那么创建数据库的时候会为你创建默认保留策略,若创建自定义策略,要加上default转换为默认策略。
例如:
CREATE RETENTION POLICY "one_day_only" ON "netstat2" DURATION 1d REPLICATION 2 SHARD DURATION 1h DEFAULT
show retention policies on netstat2
name duration shardGroupDuration replicaN default
autogen 0s 168h0m0s 3 false
one_day_only 24h0m0s 1h0m0s 2 true
上面的autogen是默认策略,一直保存,168小时(一周)做一个分片,我们有4个节点,副本因子是3,那么4/3,分片组(shardGroup)里只会有一个分片,也就是一个时段内数据只会写入一个分片并复制另外2个副本,这只有副本可靠性的提升。
one_day_only是自定义策略,一天清理一次,一个小时做一个分片,我们有4个节点,创建了2个副本因子,那么在一个shardGroup里面就有2个分片,写入分片组的TS数据是根据serices的Hash取模方式在双分片上分布,那么一个时段内数据在多分片的Hash分布,就能实现读写性能提升,同时复制另外两个分配形成双副本的可靠性。