HBase刪除數據的原理


轉自:https://blog.csdn.net/cenjianteng/article/details/96645447

 

------------------------------------------------------------------------------------------------------

HBase 的刪除操作並不會立即將數據從磁盤上刪除,刪除操作主要是對要被刪除的數據打上標記。

當執行刪除操作時,HBase 新插入一條相同的 KeyValue 數據,但是使 keytype=Delete,這便意味着數據被刪除了,直到發生 Major compaction 操作時,數據才會被真正的從磁盤上刪除,刪除標記也會從StoreFile刪除。

Time To Live (TTL)
ColumnFamilies可以設置TTL長度(以秒為單位),HBase將在到期時間后自動刪除行。這適用於行的所有版本,包括當前版本。
當Minor compaction操作時,僅刪除包含過期行的存儲文件。設置hbase.store.delete.expired.storefile為false禁用此功能。將最小版本數設置為0以外也會禁用此功能。
HBase還支持按每個單元格設置生存時間(TTL)。

Cell TTL處理和ColumnFamily TTL之間存在兩個顯着差異:
• Cell TTL以毫秒而不是秒為單位表示。
• Cell TTL的TTL不能超過ColumnFamily 的TTL。


Keeping Deleted Cells
可以選擇保留已刪除的單元格。刪除key之后,數據是否還保留。

默認情況下,delete標記會涉及到時間的開始處(即delete操作會標記所有的版本)。因此,Get或Scan操作不會看到已刪除的單元格(行或列),即使Get或Scan操作設置了刪除標記之前的時間范圍。

ColumnFamilies可以選擇保留已刪除的單元格。在這種情況下,仍然可以檢索已刪除的單元格,只要這些操作指定一個時間范圍,該時間范圍在任何會影響單元格的刪除的時間戳之前結束。允許在刪除的情況下進行時間點查詢。

被刪除的單元格仍然受TTL限制,並且永遠不會有超過“最大版本數量”的已刪除單元格。

使用HBase Shell 更改KEEP_DELETED_CELLS的值
hbase> hbase> alter't1',NAME =>'f1',KEEP_DELETED_CELLS => true

使用API 更改KEEP_DELETED_CELLS的值
HColumnDescriptor.setKeepDeletedCells(true);

KEEP_DELETED_CELLS是為了避免從HBase中刪除單元格,因為刪除它們的惟一原因是刪除標記。因此,在啟用了KEEP_DELETED_CELLS后,如果編寫的版本多於配置的最大值,或者TTL和單元格超過了配置的超時時間,則刪除單元格。
————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM