• -------------------------------------------------------------
  • ====================================

INFLUXDB基础(四)——INFLUXDB保留策略(RETENTION POLICY)自动清理过期数据

大数据库 dewbay 2年前 (2022-07-04) 1093次浏览 已收录 0个评论 扫描二维码

前言

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

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

查看数据库 RETENTION POLICY

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

<code class="prism language-bash has-numbering">show retention policies
<span class="token comment"># 当没有切换使用哪个数据库时,</span>
<span class="token comment"># 可 on 指定查看哪个数据库的<a href="https://www.lushuiwan.com/tag/%e4%bf%9d%e7%95%99%e7%ad%96%e7%95%a5" title="查看更多关于保留策略的文章" target="_blank">保留策略</a></span>
show retention policies on databaseName
</code>

INFLUXDB基础(四)——INFLUXDB保留策略(RETENTION POLICY)自动清理过期数据

 

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

  • name保留策略的名称。
  • duration,数据保留的持续时长,最小为1hretention policy duration must be at least 1h0m0s)。如果设置为 0,数据永久保存(官方默认 RP),否则过期清理。
  • shardGroupDuration,数据存储在shardGroup的时间跨度。shardGroupinfluxdb的一个逻辑存储结构,其下包含多个shard
  • replicaN,全称 replication,副本个数,指数据有多少个独立的备份存在,一般设置 1。
  • default,true 为默认保留策略

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

retention policy’s duration shardGroupDuration
< 2 days 1 h
>= 2 days and <= 6 months 1 day
> 6 months 7 days

RETENTION POLICY 管理

创建 RETENTION POLICY

基本语法:

<code class="prism language-sql has-numbering"><span class="token keyword">CREATE</span> <a href="https://www.lushuiwan.com/tag/retention" title="查看更多关于 RETENTION 的文章" target="_blank">RETENTION</a> <a href="https://www.lushuiwan.com/tag/policy" title="查看更多关于 POLICY 的文章" target="_blank">POLICY</a> <span class="token operator"><</span>retention_policy_name<span class="token operator">></span> <span class="token keyword">ON</span> <span class="token operator"><</span>database_name<span class="token operator">></span> DURATION <span class="token operator"><</span>duration<span class="token operator">></span> <span class="token keyword">REPLICATION</span> <span class="token operator"><</span>n<span class="token operator">></span> <span class="token punctuation">[</span>SHARD DURATION <span class="token operator"><</span>duration<span class="token operator">></span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">DEFAULT</span><span class="token punctuation">]</span>
</code>
  • 1
  • retention_policy_name: 策略名。
  • database_name: 数据库名(db 必须存在)。
  • duration: 数据保留时长。
  • REPLICATION: 定义每个point保存的副本数,默认为 1。
  • SHARD DURATION:设置shardGroupDuration时长,表示每个shard group时间跨度时长。可不填,默认根据 RP 的 duration 计算。
  • default: true 为设置该 RP 为默认 RP。

示例:

<code class="prism language-bash has-numbering"><span class="token comment"># 为 monitor 库创建一个数据保留时长 30 天的 rp,同时设置 shard duration 为 1d,副本为 1,并设置为默认 rp</span>
create retention policy rp_30_days on monitor duration 30d replication 1 shard duration 1d default
<span class="token comment"># 为 monitor 库创建一个数据保留时长一个星期的 rp,副本为 1</span>
create retention policy rp_one_week on monitor duration 1w  replication 1
</code>
  • 1
  • 2
  • 3
  • 4

INFLUXDB基础(四)——INFLUXDB保留策略(RETENTION POLICY)自动清理过期数据

修改 RETENTION POLICY

基本语法:

<code class="prism language-sql has-numbering"><span class="token keyword">ALTER</span> <a href="https://www.lushuiwan.com/tag/retention" title="查看更多关于 RETENTION 的文章" target="_blank">RETENTION</a> <a href="https://www.lushuiwan.com/tag/policy" title="查看更多关于 POLICY 的文章" target="_blank">POLICY</a> <span class="token operator"><</span>retention_policy_name<span class="token operator">></span> <span class="token keyword">ON</span> <span class="token operator"><</span>database_name<span class="token operator">></span> DURATION <span class="token operator"><</span>duration<span class="token operator">></span> <span class="token keyword">REPLICATION</span> <span class="token operator"><</span>n<span class="token operator">></span> <span class="token punctuation">[</span>SHARD DURATION <span class="token operator"><</span>duration<span class="token operator">></span><span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">DEFAULT</span><span class="token punctuation">]</span>
</code>
  • 1

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

示例:

<code class="prism language-bash has-numbering"><span class="token comment"># 修改 rp_1_week 保留数据时长为 15days </span>
alter retention policy rp_1_week on monitor duration 15d replication 1 default 
<span class="token comment"># 设置 rp_30_days 为默认 rp</span>
alter retention policy rp_30_days on monitor default 
</code>
  • 1
  • 2
  • 3
  • 4

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

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

删除 RETENTION POLICY

基本语法:

<code class="prism language-sql has-numbering"><span class="token keyword">DROP</span> <a href="https://www.lushuiwan.com/tag/retention" title="查看更多关于 RETENTION 的文章" target="_blank">RETENTION</a> <a href="https://www.lushuiwan.com/tag/policy" title="查看更多关于 POLICY 的文章" target="_blank">POLICY</a> <span class="token operator"><</span>retention_policy_name<span class="token operator">></span> <span class="token keyword">ON</span> <span class="token operator"><</span>database_name<span class="token operator">></span>
</code>
  • 1

示例:

<code class="prism language-bash has-numbering"><span class="token comment"># 删除名为 rp_1_week 的 rp</span>
drop retention policy rp_1_week on monitor
</code>
  • 1
  • 2

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

写数据指定 RETENTION POLICY

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

<code class="prism language-bash has-numbering"><span class="token comment"># 在没有 use 哪个 db 的时候需要指定 db,选择 monitor 数据库,指定 rp 为 rp_3_days 写入数据到 service_qps</span>
insert into monitor.rp_3_days service_qps,svrName<span class="token operator">=</span>TaskSvr,hostName<span class="token operator">=</span>dev4 qps<span class="token operator">=</span>12.9

<span class="token comment"># 切换选择 monitor</span>
use monitor
<span class="token comment"># 并指定 rp 为 rp_3_days 写入数据到 service_qps</span>
insert into rp_3_days service_qps,svrName<span class="token operator">=</span>TaskSvr,hostName<span class="token operator">=</span>dev4 qps<span class="token operator">=</span>12.9
</code>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

查数据指定 RETENTION POLICY

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

<code class="prism language-bash has-numbering"><span class="token comment"># 默认指定默认 RP</span>
<span class="token keyword">select</span>  *  from  service_qps
<span class="token comment"># 指定 RP 查询</span>
<span class="token keyword">select</span>  *  from  rp_3_days.service_qps
</code>
  • 1
  • 2
  • 3
  • 4

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

<code class="prism language-bash has-numbering"><span class="token comment"># 完全错误的写法</span>
insert rp_3_days.service_qps,svrName<span class="token operator">=</span>TaskSvr,hostName<span class="token operator">=</span>dev4 qps<span class="token operator">=</span>12.9
</code>
  • 1
  • 2

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

SERIES=MEASUREMENT +TAGS SET+RETENTION POLICY

seriesmeasurement +tags set + retention policy 组成的数据集合。同个 database中,retention policymeasurementtags set完全相同的数据同属于一个 series,同个series的数据在物理上会按照时间顺序排列存储在一起。serieskeymeasurement + 所有 tags组成的字符串。
INFLUXDB基础(四)——INFLUXDB保留策略(RETENTION POLICY)自动清理过期数据

show series无法区分查看到不同RP,相同measurementtag setseries。经测试 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. seriesmeasurement +tags set + retention policy 组成的数据集合,其 key 为measurement + 所有 tags的组成的字符串,show series无法得知measurement指定RP的情况。

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

参考:


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:INFLUXDB基础(四)——INFLUXDB保留策略(RETENTION POLICY)自动清理过期数据
喜欢 (0)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址