0

HBase 是否在其 Memstore 中执行就地更新。假设如果同一个rowkey有多个版本的值,HBase memstore会删除旧值并用新值替换它吗?

4

2 回答 2

1

不,它不会删除和替换现有记录。它将新的键值(记录数据)附加到 memstore。第一个原因:它可能被配置为保留多个版本的单元格(列)值。但是,即使 memstore 中的单元格版本多于配置保留的单元格版本,它仍会追加记录而不是覆盖它(或删除最旧的)。

但是,请注意,在较新的 HBase 版本(0.92+)中,对 memstore 刷新过程进行了优化:它可能会跳过(不要写入 HFiles)那些太旧的单元格版本(即不应该包含在要保留的最大版本数)。更多信息在这里:HBASE-4241。尽管它看起来像是“覆盖”了 Memstore 中的现有值(至少从外部角度来看),但它并没有完全做到这一点。这种优化只发生在 memstore 刷新时,因此不会影响 memstore 大小:当写入新值时,它们总是附加。即这种优化不会导致刷新发生得更少。

这里正在进行与优化相关的工作,因此请注意下一个版本。

是的,正如 Richard 所提到的,您可以在此处了解有关配置 HBase Memstore的更多信息。

于 2012-07-24T03:48:08.643 回答
0

memstore 像 HFile 一样保存更新,但它只会根据表的配置写入磁盘(例如,如果您将表设置为仅保存一行的一个版本,则只有最新的版本才会写入磁盘)。

这里有一个很好的解释 memstore 是如何工作

于 2012-07-22T17:22:44.723 回答