retention policy这个东西相比较于传统的关系型数据库(好比mysql)而言,是一个比较新的东西,在将表以前,有必要来看一下保存策略有什么用,以及能够怎么用mysql
retention policy
依托于database存在,也就是说保存策略建立时,须要指定具体的数据库,语法以下git
CREATE RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]
复制代码
建立语句中,有几个地方须要额外注意一下github
retention_policy_name
: 策略名(自定义的)database_name
: 一个必须存在的数据库名duration
: 定义的数据保存时间,最低为1h,若是设置为0,表示数据持久不失效(默认的策略就是这样的)REPLICATION
: 定义每一个point保存的副本数,默认为1default
: 表示将这个建立的保存策略设置为默认的下面是一个实际的case,建立一个数据保存一年的策略sql
create retention policy "1Y" on test duration 366d replication 1
复制代码
上面演示的case中,已经有如何查看一个数据库的保存策略了数据库
show retention policies on <database name>
复制代码
修改一个已经存在的保存策略,语法以下bash
ALTER RETENTION POLICY <retention_policy_name> ON <database_name> DURATION <duration> REPLICATION <n> SHARD DURATION <duration> DEFAULT
复制代码
上面的定义和前面建立基本一致,下面给出一个case学习
DROP RETENTION POLICY <retention_policy_name> ON <database_name>
复制代码
当以下面的case,删除了默认的策略以后,会发现竟然没有了默认的保存策略了,这个时候可能须要注意下,手动指定一个ui
前面虽然介绍了保存策略的增删改查,可是这个东西究竟有什么用,又能够怎么用呢?spa
看一下前面查看保存策略的图日志
从前面的查看,能够看到保存策略主要有三个关键信息,数据保存时间
,数据分片时间
,副本数
duration 这一列,表示的就是这个策略定义的数据保存时间
由于咱们知道每条记录都有一个time代表这条记录的时间戳,若是当前时间与这条记录的time之间差值,大于duration,那么这条数据就会被删除掉
注意
默认的保存策略autogen
中的duraiton=0
,这里表示这条数据不会被删除
简单理解为每一个分片的时间跨度,好比上面的1_d
这个策略中,数据保存最近24小时的,每一个小时一个分组
咱们在建立数据策略的时候,大多时候都没有指定这个值,系统给出的方案以下
Retention Policy’s DURATION | Shard Group Duration |
---|---|
< 2 days | 1 hour |
>= 2 days and <= 6 months | 1 day |
> 6 months | 7 days |
副本这个指定了数据有多少个独立的备份存在
了解上面的几个参数以后,能够预见保存策略有个好的地方在于删除过时数据,好比使用influx来存日志,我只但愿查看最近一个月的数据,这个时候指定一个duration
时间为30天的保存策略,而后添加数据时,指定这个保存策略,就不须要本身来关心日志删除的问题了
参考博文
一灰灰的我的博客,记录全部学习和工做中的博文,欢迎你们前去逛逛
尽信书则不如,已上内容,纯属一家之言,因我的能力有限,不免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激
一灰灰blog