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和单元格超过了配置的超时时间,则删除单元格。
    ————————————————

  • 相关阅读:
    HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
    国家人工智能(AI)的美好前景
    预防埃博拉病毒感染的试验疫苗投入人体试验
    MySQL同步复制搭建方法指南详细步骤
    正则表达式,用相反的方式过滤掉特殊字符
    Linux入门教程
    Linux:-bash: ***: command not found
    linux命令大全
    linux下打开、关闭tomcat,实时查看tomcat运行日志
    chmod u+x ./j2sdk-1_4_2_04-linux-i586.bin的含义
  • 原文地址:https://www.cnblogs.com/leon0/p/12060292.html
Copyright © 2011-2022 走看看