一、概念解析:TTL:time to live,存活时间
二、Hbase TTL设置的两种方式:
1) ColumnFamily TTL
2) Cell TTL
三、ColumnFamily TTL详解
create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 30, BLOCKCACHE => true},{NAME => 'f2',VERSIONS => 1,BLOCKCACHE => true}
解析:
f1列簇下的所有cell的存活时间为30秒,从最后一次更新开始计时
f2列簇下的所有cell的存活时间为默认值,TTL => 'FOREVER'
实例演示:
1、创建测试使用的表
create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 30, BLOCKCACHE => true},{NAME => 'f2',VERSIONS => 1,BLOCKCACHE => true}
2、插入数据
put 't1','0001', 'f1:name','123'
put 't1','13954059087', 'f2:name','123'
3、查看表数据
4、30秒之后查看
5、修改 VERSIONS => 3,查看效果
disable 't1'
alter 't1',NAME => 'f1',VERSIONS => 3
enable 't1'
describe 't1'
添加数据:
put 't1','0001', 'f1:name','1'
put 't1','0001', 'f1:name','2'
put 't1','0001', 'f1:name','3'
插入三条数据稍微存在一点间隔,便于发现规律,我们这里设置TTL为30秒(间隔略短,为了测试方便)
执行语句:
get 't1','0001',{COLUMN=>'f1:name',VERSIONS=>3}
四、Cell TTL详解
val put = new Put(Bytes.toBytes(keyPhone)) put.addColumn(Bytes.toBytes(Constants.TB_HBASE_FAMILY), Bytes.toBytes(colName), Bytes.toBytes(colValue.toString)) put.setTTL(0L) // 在这里可以使设置,Cell TTL
查看源码这个值,是通过Mutation来设置的。
public Mutation setTTL(long ttl) {
setAttribute(OP_ATTRIBUTE_TTL, Bytes.toBytes(ttl));
return this;
}
五、 总结
ColumnFamily TTL和 Cell TTL的区别:
1)时间单位的区别:
ColumnFamily TTL的时间单位是:秒
Cell TTL的时间单位是:毫秒
2)优先级的问题:
Cell TTL设置的值,优先于ColumnFamily TTL的值,但是需要注意的是,Cell TTL不能大于ColumnFamily TTL的值。
如果使用ColumnFamily TTL,则TTL值对该列簇下面的所有列,都起作用,包括多版本的值。Cell TTL针对当前列起作用。