HBase删除和修改操作
HBase的底層依賴于HDFS,其在進(jìn)行數(shù)據(jù)存儲的時候使用KeyValue類型。當(dāng)數(shù)據(jù)進(jìn)行刪除或修改操作時,實(shí)際上是對KeyValue結(jié)構(gòu)中的某些部分進(jìn)行修改來完成。
1 HBase源碼分析之KeyValue
參見HBase源碼分析之KeyValue和HBase的基礎(chǔ)類型KeyValue
HBase是面向列的存儲數(shù)據(jù)的,最終的存儲單元都是KeyValue的結(jié)構(gòu),HBase本身也定義了一個KeyValue的類型,這是HBase數(shù)據(jù)存儲的基本類型。
從名字來看應(yīng)該只有兩個數(shù)據(jù),一個是Key,一個是Value,的確如此,不過這里的Key是多個元素的聚合,有rowkey,列族,列名,時間戳以及key的類型。
從左到右,依次為:
2 刪除數(shù)據(jù)
由于HBase底層依賴HDFS,對于HBase刪除操作來說,HBase無法在查詢到之前的數(shù)據(jù)并進(jìn)行修改,只能順序讀寫,追加記錄。那HBase只能追加記錄了,為了更新或刪除數(shù)據(jù),HBase會插入一條一模一樣的新的數(shù)據(jù),但是key type會標(biāo)記成Delete狀態(tài),以標(biāo)記該記錄被刪除。在讀取的時候如果取到了是Delete,而且時間是最新的,那么這條記錄肯定是被刪掉了。
3 更新數(shù)據(jù)
進(jìn)行更新操作的時候,也會重新插入一條新的數(shù)據(jù)來代替在原來數(shù)據(jù)上修改。新的數(shù)據(jù)的timestamp會大于老的數(shù)據(jù),這樣讀取的時候,判斷時間戳就可以取出最新的數(shù)據(jù)了。
4 總結(jié)
由于HBase這樣的刪除和更新機(jī)制,如果后面沒有一個對于過期數(shù)據(jù)處理的機(jī)制,會導(dǎo)致過期數(shù)據(jù)越來越大,因此后面的compact操作中的major compact就順便將過期的數(shù)據(jù)刪除掉了。
對于標(biāo)記為刪除的數(shù)據(jù),直接刪除。對于不同時間戳的多條數(shù)據(jù),根據(jù)其保存的最大版本數(shù)據(jù),刪除過期的數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的HBase删除和修改操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Elasticsearch7.X ILM
- 下一篇: 阿里妈妈搜索广告CTR模型的“瘦身”之路