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

  • 相关阅读:
    开源项目之Android Afinal框架
    DateTimePicker——开源的Android日历类库
    Android 教你打造炫酷的ViewPagerIndicator
    Android UI-仿微信底部导航栏布局
    Android 下拉刷新框架实现
    Android-设置PullToRefresh下拉刷新样式
    Android-PullToRefresh下拉刷新库基本用法
    android 在使用ViewAnimationUtils.createCircularReveal()无法兼容低版本的情况下,另行实现圆形...
    Android5.0新特性——兼容性(support)
    求訪问啊啊啊啊
  • 原文地址:https://www.cnblogs.com/leon0/p/12060292.html
Copyright © 2011-2022 走看看