溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hbase時間戳修改帶來的問題有哪些

發(fā)布時間:2021-11-19 16:44:48 來源:億速云 閱讀:317 作者:小新 欄目:云計算

這篇文章主要介紹hbase時間戳修改帶來的問題有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

公司業(yè)務(wù):數(shù)據(jù)錄入的時候,同一時刻,一條數(shù)據(jù)的某個字段存在多版本情況。
根據(jù)資料,hbase 插入數(shù)據(jù)的時候可以手動設(shè)置時間戳,這樣把多個版本的時間戳區(qū)別開,但是發(fā)現(xiàn)hbase數(shù)據(jù)不能刪除。

經(jīng)過分析,這是由于:插入數(shù)據(jù)時候,人為設(shè)定的時間戳大于,刪除的時間戳。 當(dāng)client端系統(tǒng)時間大于集群系統(tǒng)時間,就會可能出現(xiàn)這種情況。

作結(jié),hbase java代碼部署的client服務(wù)器,最好和集群hbase服務(wù)器時間做同步,就會避免以上問題。

像OB,HBase這種存儲系統(tǒng),插入數(shù)據(jù)的時候,一般數(shù)據(jù)上都會有一個時間戳(ts)。

Hbase有一個TTL(time to live),可以標(biāo)識數(shù)據(jù)的有效期,比如,可以把TTL設(shè)置成86400*1000,也就是說數(shù)據(jù)將于1天后過期。這是一個表級的設(shè)置,必須在建表時指定。

但是如果說你需要存儲某一天內(nèi)的數(shù)據(jù),到第二天0點失效。這種情況TTL是沒法控制的,因為TTL只能控制數(shù)據(jù)在一段時間后失效,而不能控制在特定的時間點失效。

TTL的本質(zhì)是通過對比數(shù)據(jù)的ts,與當(dāng)前系統(tǒng)時間,然后確定是否應(yīng)該失效,于是,我們可以通過ts來hack一下。

假設(shè)數(shù)據(jù)的TTL是1天,如果我在凌晨1點插入數(shù)據(jù),那么正常情況,它會到第二天凌晨1點失效。實際上就是判斷:currentMilliseconds - ts > 86400*1000,如果滿足,數(shù)據(jù)就失效了。

這時如果要控制數(shù)據(jù)在第二天0點就失效,我們把插入數(shù)據(jù)的ts往后推一小時就可以了,它就會提前失效。

這個方案理論上看起來沒有問題,但是如果你的表涉及到刪除數(shù)據(jù),那么,坑就來了。

HBase普通的操作,都會寫入WAL(Write ahead log),累積到一定數(shù)量后(或者根據(jù)時間),根據(jù)操作的ts,進行merge,然后對真實的數(shù)據(jù)做commit,這個跟數(shù)據(jù)庫的log是有點類似的。

這里面隱含的一點是,hbase中的操作,是需要ts比當(dāng)前數(shù)據(jù)中的ts大,操作才會有效,否則就無效(正常的都是這樣的,因為時間是不斷變大的嘛)。

比如當(dāng)前有2個操作:

put 'key', 'value', ts=1

put 'key', 'value', ts=2

那么經(jīng)過合并后,實際上只會有一個操作:

put 'key', 'value', ts=2(因為這個時間戳比較大嘛)

接著來,如果有3個操作:

put 'key', 'value', ts=1

put 'key', 'value', ts=2

del 'key', 'value', ts=3

那么,合并后,就只有delete的操作了。

坑就在這里,因為我們是手動設(shè)置插入數(shù)據(jù)的ts的。這就意味著,如果要刪除數(shù)據(jù),那必須要將刪除操作的ts設(shè)置得比原來的數(shù)據(jù)的ts要大(在我們的情況中,兩個時間都是未來)。

如果刪除操作,使用了系統(tǒng)默認(rèn)的ts,那么造成的結(jié)果是:數(shù)據(jù)無法被刪除。

OK,那我們就知道,會將刪除的ts設(shè)大??墒沁@時,如果你再插入數(shù)據(jù),就必須將插入數(shù)據(jù)的ts設(shè)置得比刪除操作的ts還要大。。。其實就是,對同一個cell的操作,要想你的操作有效,你必須將它的ts設(shè)置為比當(dāng)前操作序列中最大的還要大。。。

然后,如果一不小心,你想當(dāng)然地把刪除的ts設(shè)置成了Long.MAX_VALUE,你就會發(fā)現(xiàn),你永遠也插入不了數(shù)據(jù)了。。。。(其實不是永遠啦,要到下一次major compact)。

以上是“hbase時間戳修改帶來的問題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI