Hbase之TTL

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是針對於某一行數據的某一個版本而言的,當到達過期時間時,會刪除這一個版本,而並非刪除這一行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章