0
点赞
收藏
分享

微信扫一扫

influxdb基础(四)——influxdb保留策略(retention policy)自动清理过期数据



文章目录


  • ​​前言​​
  • ​​查看数据库retention policy​​
  • ​​retention policy管理​​

  • ​​创建retention policy​​
  • ​​修改retention policy​​
  • ​​删除retention policy​​

  • ​​写数据指定retention policy​​
  • ​​查数据指定retention policy​​
  • ​​series=measurement +tags set+retention policy​​
  • ​​总结​​


前言

对于传统关系型数据库,增删改查应该是必备且常用的功能,而​​influxdb​​​常用的只有​​insert​​​和​​select​​​,没有提供​​update​​​语法,虽然有​​delete​​​可以删除数据(​​delete​​​语法和​​mysql​​相似),但是需求不大。

因为存储的数据都是跟时间有关的测量数值,多用于图表展示,不太需要人为的去删除,而有时统计的数据是秒级,甚至毫秒级、纳秒级的,势必造成数据量巨大。如果一直长久存储会占用机器大量资源,而且有些数据越旧越失去它的时效性,越没有参考价值,所以保留策略​​retention policy​​就是可以让数据存储一段时间后自动清除。

查看数据库retention policy

​retention policy​​​是数据库级别的属性,也是数据结构的一部分。一个database可以有多个保留策略​​retention policy​​​,但是只能有一个默认​​retention policy​​。

show retention policies
# 当没有切换使用哪个数据库时,
# 可 on 指定查看哪个数据库的保留策略
show retention policies on databaseName

influxdb基础(四)——influxdb保留策略(retention policy)自动清理过期数据_influxdb

一个数据库新建都会分配一个默认的保留策略:


  • ​name​​,保留策略的名称。
  • ​duration​​​,数据保留的持续时长,最小为​​1h​​​(​​retention policy duration must be at least 1h0m0s​​)。如果设置为0,数据永久保存(官方默认RP),否则过期清理。
  • ​shardGroupDuration​​​,数据存储在​​shardGroup​​​的时间跨度。​​shardGroup​​​是​​influxdb​​​的一个逻辑存储结构,其下包含多个​​shard​​。
  • ​replicaN​​,全称replication,复制因子,它决定在集群中存储多少个数据副本。inflxudb集群中跨N个数据节点复制数据,其中N就是复制因子。复制因子对单个节点实例不起作用,所以单机版直接设置为1即可。
  • ​default​​,true为默认保留策略。

​shardGroupDuration​​​是根据​​retention policy​​​的​​duration​​​计算得来,不过也可以在创建​​retention policy​​​指定。如下是​​retention policy's duration​​​和​​shardGroupDuration​​的计算关系:

retention policy’s duration

shardGroupDuration

< 2 days

1 h

>= 2 days and <= 6 months

1 day

> 6 months

7 days

retention policy管理

创建retention policy

基本语法:

CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]

  • ​retention_policy_name​​: 策略名。
  • ​database_name​​: 数据库名(db必须存在)。
  • ​duration​​: 数据保留时长。
  • ​REPLICATION​​: 复制因子,单机版设置为1即可。
  • ​SHARD DURATION​​​:设置​​shardGroupDuration​​​时长,表示每个​​shard group​​时间跨度时长。可不填,默认根据RP的duration计算。
  • ​default​​: true为设置该RP为默认RP。

示例:

# 为monitor库创建一个数据保留时长30天的rp,同时设置shard duration为1d,副本为1,并设置为默认rp
create retention policy rp_30_days on monitor duration 30d replication 1 shard duration 1d default
# 为monitor库创建一个数据保留时长一个星期的rp,副本为1
create retention policy rp_one_week on monitor duration 1w replication 1

influxdb基础(四)——influxdb保留策略(retention policy)自动清理过期数据_policy_02

修改retention policy

基本语法:

ALTER RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]

ALTER可修改的部分有duration、replication、shard duration、default,修改时无需每个属性都写上,可修改哪个写哪个。

示例:

# 修改rp_1_week 保留数据时长为15days 
alter retention policy rp_1_week on monitor duration 15d replication 1 default
# 设置rp_30_days为默认rp
alter retention policy rp_30_days on monitor default

设置某个​​RP​​​为默认​​RP​​​时,旧默认​​RP​​​会自动改为非默认​​RP​​。

​retention policy​​​不能修改RP名称,如果自主命名的RP名称和修改后的​​duration​​不匹配,还不如把旧RP删除,新建一个RP。

删除retention policy

基本语法:

DROP RETENTION POLICY <retention_policy_name> ON <database_name>

示例:

# 删除名为rp_1_week的rp
drop retention policy rp_1_week on monitor

注:​​duration​​​和​​shard duration​​​取值,​​1h​​​(1小时)、​​1d​​​(1天)、​​1w​​(1周)。

写数据指定retention policy

当一个数据库有多个​​retention policy​​​,写数据时,如不想默认​​RP​​​,可指定其他​​RP​​​。如,monitor库有两个​​RP​​​,一个是默认​​RP​​保留数据30天,一个保留数据3天,现写入数据指定RP为3天那个。

# 在没有use 哪个db的时候需要指定db,选择monitor数据库,指定rp为rp_3_days写入数据到service_qps
insert into monitor.rp_3_days service_qps,svrName=TaskSvr,hostName=dev4 qps=12.9

# 切换选择monitor
use monitor
# 并指定rp为rp_3_days写入数据到service_qps
insert into rp_3_days service_qps,svrName=TaskSvr,hostName=dev4 qps=12.9

写数据指定数据库或者RP时,需要使用​​insert into​​​。默认db和默认RP写数据使用​​insert​​。

查数据指定retention policy

既然写数据时指定了非默认RP,查数据时也必须指定RP。

# 默认指定默认RP
select * from service_qps
# 指定RP查询
select * from rp_3_days.service_qps

指定RP查询需要注意:因为select语法是​​select * from RP.MEASUREMENT​​,所以千万不要使用如下语句写数据:

# 完全错误的写法
insert rp_3_days.service_qps,svrName=TaskSvr,hostName=dev4 qps=12.9

使用​​insert​​​写数据时,以为指定了​​RP​​​,实则是写数据到名为​​rp_3_days.service_qps​​​的​​measurement​​​中,当想查​​measurement​​​名为​​rp_3_days.service_qps​​​数据时会和RP为​​rp_3_days​​​,​​measurement​​​为​​service_qps​​产生语法冲突。

series=measurement +tags set+retention policy

​series​​是​​measurement​​ +​​tags set​​ + ​​retention policy​​ 组成的数据集合。同个 ​​database​​中,​​retention policy​​、​​measurement​​、​​tags set​​完全相同的数据同属于一个 ​​series​​,同个​​series​​的数据在物理上会按照时间顺序排列存储在一起。​​series​​的​​key​​为​​measurement​​ + 所有 ​​tags​​组成的字符串。

influxdb基础(四)——influxdb保留策略(retention policy)自动清理过期数据_policy_03

​show series​​​无法区分查看到不同​​RP​​​,相同​​measurement​​​和​​tag set​​​的​​series​​​。经测试 ​​show series from​​​ 后无法区分RP,即使加了RP也没用(​​RP.MEASUREMENT​​)。

所以并没有办法显而易见知道一个​​measurement​​​到底指定了哪些​​retention policy​​。

总结


  1. 虽然有删除语法​​delete​​​,但是平时不太需要人工手动删数据,而是设置合适的​​retention policy​​,过期自动清理数据。
  2. 写数据指定RP需要使用​​insert into​​​语法,即​​insert into RP MEASUREMENT,tag1=xxx field1=12.0​​。
  3. ​select * from xxx​​​默认查询的是默认​​RP​​​的数据,需指定​​RP​​​,即​​select * from RP.MEASUREMENT​​。
  4. ​series​​​是​​measurement​​​ +​​tags set​​​ + ​​retention policy​​​ 组成的数据集合,其key为​​measurement​​​ + 所有 ​​tags​​​的组成的字符串,​​show series​​​无法得知​​measurement​​​指定​​RP​​的情况。

PS: ​如若文章中有错误理解,欢迎批评指正,同时非常期待你的评论、点赞和收藏。我是徐同学,愿与你共同进步!

参考:


  • ​​retention policy 保存策略​​
  • ​​https://docs.influxdata.com/influxdb/v1.7/concepts/glossary/#series​​


举报

相关推荐

0 条评论