Hbase之TTL(Time To Live)

1. 前言
今天刚刚接触了Hbase一些知识,对其中的TTL(Time To Live),有些概念理解不是很清楚,也看了官网的一些英文解释,觉得解释的不是很好理解,这篇博客仅仅记录自己对TTL的理解以及做的一个小测试
2. 创建表emp进行测试

进入hbase shell

hbase(main):001:0> create 'default:emp', 'base_info'

# 设置版本数量为180个,设置存活时间为120秒,即2分钟
hbase(main):002:0> alter 'default:emp', VERSIONS => 180, TTL => '120'

每隔10秒向表中插入一条数据

hbase(main):003:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan'
hbase(main):004:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan1'
hbase(main):005:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan2'
hbase(main):006:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan3'
hbase(main):007:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan4'
hbase(main):008:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan5'
hbase(main):009:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan6'

此时表中已经有了7条数据

使用scan命令查看,每次查看20个version的数据

hbase(main):010:0> scan 'default:emp', VERSIONS => 20

等到第一条数据被删除时,立马重新插入一条

这里最好插入value值不同的一个,当然相同也可以,为了保证时间的准确,我插入了和上一条一样的zhangsan6

hbase(main):011:0> put 'default:emp', 'row1', 'base_info:name', 'zhangsan6'

之后查看现在所存在的版本信息

hbase(main):012:0> scan 'default:emp', VERSIONS => 20

通过以上两张图片,大家可以看到插入第一条zhangsan的时间戳,也就是版本号为1574772998970
插入最后一条zhangsan6的数据的版本号为1574773120727
这两个数据的差值为:121757

这个是以实践戳最为版本号,所以单位都是毫秒,两个时间戳相差121757毫秒
我们设置的TTL为120秒,也就是120000毫秒,和121757相差1757毫秒,因为插入操作需要时间,也在时间的允许范围之类

再看一张图片,因为我们每隔10秒插入一条数据,当zhangsan2被删除时,也同样插入一条数据

此时插入的第一行的zhangsan6的版本号为1574773142866,上一次插入zhangsan6的版本号1574773120727
两个版本相差时间为22139,大约为220秒,因为我们在zhangsan1被删除的时候并没有插入数据,也就是说等zhangsan2被删除的时候,相比于第一次zhangsan被删除的时间已经过去了20秒,两个时间相加大概240秒,刚刚是2个TTL的时长
3. 总结
通过这个简单的实验,可以看出来,TTL的存活时间是针对于每一个版本来说的,因为默认每一个版本都是以当前的时间戳作为版本号,也就是说当某个版本插入时,从它的版本号开始算起,在TTL的过期时间到达时,这个版本就会被删除,而不是删除这一行的数据

TTL是针对于某一行数据的某一个版本而言的,当到达过期时间时,会删除这一个版本,而并非删除这一行