zoukankan      html  css  js  c++  java
  • 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和单元格超过了配置的超时时间,则删除单元格。
    ————————————————

  • 相关阅读:
    Net学习日记_SQL_1
    Net学习日记_基础提高_11_俄罗斯方块_代码篇
    Net学习日记_基础提高_11_俄罗斯方块_整理概括篇
    Net学习日记_基础提高_10
    C#抽象类和接口
    RSS大全
    如何使用deparam.js抓参数
    h5页面解决软键盘与100%X100%的页面的冲突
    29、数据库三大范式精要总结
    28、数据库三大范式精讲
  • 原文地址:https://www.cnblogs.com/leon0/p/12060292.html
Copyright © 2011-2022 走看看