说明
TTL缩写Time To Live,即生存期。
TTL是作用于 列族 的,它设置了一个基于时间戳的临界值, 内部的管理会自动检查TTL值是否达到上限,如果 达到上限,即 数据过期,那么就查询不到该数据。
TTL的单位是 秒,默认值是 Integer.MAX_VALUE
,即 2^31-1=2 147 483 647
秒,大约68年。
使用TTL默认值的数据可以理解为 永久 保存,即:FOREVER
作用
设置合理的 TTL,可以释放空间
什么时候删除?
在 major Compaction
合并过程中时间戳被判定为 超过TTL的数据会被自动删除,即:将数据从文件中删除。
查看 TTL
desc 'user2'
如下图红框处:
创建表指定 TTL
创建 test_ttl
表,列族 info
, TTL设置 10
秒过期
create 'test_ttl',{NAME => 'info', TTL=>'10'}
查看:
desc 'test_ttl'
看到 TTL => '10 SECONDS'
测试:添加数据
put 'test_ttl','1000','info:name','lilei'
立即扫描表
scan 'test_ttl'
有 lilei
这条数据
10秒后扫描表
lilei
这条数据由于 TTL 过期,被删除了
RAW 扫描表
scan 'test',{ RAW => true}
是可以看到 TTL过期数据的,如下:
ROW COLUMN+CELL
1000 column=info:name, timestamp=1638068502991, value=lilei
1002 column=info:name, timestamp=1638068535350, value=lilei
2 row(s)
Took 0.0138 seconds
修改表的 TTL
查看表结构
desc "student"
看到 TTL => 'FOREVER',FOREVER
永不过期
添加测试数据
put 'student','1000','info:name','lilei'
put 'student','1001','info:name','lucy'
先禁用表
注意:
修改之前,需要先
disable
表,否则表中的记录被清空。亲测,过期数据还是会被清空,即:在2.1.x版本中,本步骤可略
disable "student"
再修改表的 TTL
5秒
后过期:
alter "student",NAME=>'info',TTL=>'5'
设置TTL值,作用于列族data
最后启用表
enable "student"
再次查看
desc "student"
可以看到 TTL => '5 SECONDS'
秒
扫描表
scan "student"
由于数据 TTL过期,被清空
再次修改表的 TTL
1小时
后过期:
alter "student",NAME=>'info',TTL=>'3600'
扫描表
scan "student"
由于数据 TTL 没有过期,数据都还在
测试添加
同上
修改表的 TTL 为永久
alter "student",NAME=>'info',TTL=>'FOREVER'