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可以选择保留已删除的单元格。在这种情况下,仍然可以检索已删除的单元格,只要这些操作指定一个时间范围,该时间范围在任何会影响单