登录    关于
马育民老师的博客

马育民的博客

QQ:65242847

HBase2.1.x TTL

说明

TTL缩写Time To Live,即生存期。

TTL是作用于 列族 的,它设置了一个基于时间戳的临界值, 内部的管理会自动检查TTL值是否达到上限,如果 达到上限,即 数据过期,那么就查询不到该数据

major Compaction 合并过程中时间戳被判定为 超过TTL的数据会被自动删除,即:将数据从文件中删除。

TTL的单位是 ,默认值是 Integer.MAX_VALUE,即 2^31-1=2 147 483 647 秒,大约68年。

使用TTL默认值的数据可以理解为 永久 保存,即:FOREVER

作用

设置合理的 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'

原文出处:http://malaoshi.top/show_1IX2JClZMsIE.html