Hbase TTL(Time To Live)详解

时间:2021-07-21 20:24:21

一、概念解析: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、查看表数据

      Hbase TTL(Time To Live)详解

    4、30秒之后查看

      Hbase TTL(Time To Live)详解

    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}

    Hbase TTL(Time To Live)详解

   

四、Cell TTL详解  

        1.0.0, 0.98.9版本及以后可以使用这个特性。

  

    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针对当前列起作用。