为什么 HBase 删除会恢复到以前的值而不是完全删除它
Why HBase Delete Reverts Back to Previous Value instead of Totally Deleting it
假设我有一个名为 signup_date
的列,其值为 2019-09-09
。那么我会把这个专栏更新为2019-11-11
。所以 signup_date
现在是 2019-11-11
.
在那之后,如果我删除 signup_date
列,我希望它会在 Hbase 中消失,但它会保留在那里并恢复到 2019-09-09
。
这是 hbase 中的一个错误,删除的列会恢复到以前的值吗?
您是否在 table 中为列族指定了 VERSIONS 和 MIN_VERSIONS?假设,您指定 MIN_VERSIONS 为 3,那么每次覆盖现有数据时,都会将其存储为另一个版本。所以,基本上,当您删除该列时,它只是删除了最新版本,而当您获得该列的值时,它将删除以前的版本。这实际上是预期的行为。
您可以通过更改 table 中的列族来更改属性。
发生这种情况是因为 HBase 不会立即删除或覆盖单元格。
当您删除一个单元格时,它会被标记为墓碑,并在扫描 table 期间被扫描仪过滤掉。
但是当您只是覆盖旧版本时,它不会以任何方式被标记。所有比 MAX_VERSION_CONFIGURED_IN_THE_TABLE
更早的单元将在主要压缩期间被删除。在此之前,在 table 扫描期间,每列的最大版本基于:
min(MAX_VERSION_CONFIGURED_IN_THE_TABLE, MAX_VERSION_CONFIGURED_IN_THE_SCANER)
但是如果你在执行主要压缩之前删除一个新的单元格,那么最新的覆盖版本将会弹出。
基本上问题是我们在使用 addColumn 时它应该是我们 hbase 删除中的 addColumns。 addColumn 恢复到以前的版本(因此值在删除时恢复到以前的值)而 addColumns 删除所有现有版本。
假设我有一个名为 signup_date
的列,其值为 2019-09-09
。那么我会把这个专栏更新为2019-11-11
。所以 signup_date
现在是 2019-11-11
.
在那之后,如果我删除 signup_date
列,我希望它会在 Hbase 中消失,但它会保留在那里并恢复到 2019-09-09
。
这是 hbase 中的一个错误,删除的列会恢复到以前的值吗?
您是否在 table 中为列族指定了 VERSIONS 和 MIN_VERSIONS?假设,您指定 MIN_VERSIONS 为 3,那么每次覆盖现有数据时,都会将其存储为另一个版本。所以,基本上,当您删除该列时,它只是删除了最新版本,而当您获得该列的值时,它将删除以前的版本。这实际上是预期的行为。
您可以通过更改 table 中的列族来更改属性。
发生这种情况是因为 HBase 不会立即删除或覆盖单元格。 当您删除一个单元格时,它会被标记为墓碑,并在扫描 table 期间被扫描仪过滤掉。
但是当您只是覆盖旧版本时,它不会以任何方式被标记。所有比 MAX_VERSION_CONFIGURED_IN_THE_TABLE
更早的单元将在主要压缩期间被删除。在此之前,在 table 扫描期间,每列的最大版本基于:
min(MAX_VERSION_CONFIGURED_IN_THE_TABLE, MAX_VERSION_CONFIGURED_IN_THE_SCANER)
但是如果你在执行主要压缩之前删除一个新的单元格,那么最新的覆盖版本将会弹出。
基本上问题是我们在使用 addColumn 时它应该是我们 hbase 删除中的 addColumns。 addColumn 恢复到以前的版本(因此值在删除时恢复到以前的值)而 addColumns 删除所有现有版本。