Memstore在HBase中如何更新记录?

Memstore在HBase中如何更新记录?,hbase,Hbase,HBase是否在其Memstore中执行就地更新。假设同一行键有多个版本的值,HBase memstore会删除旧值并用新值替换吗?memstore会像HFile一样保存更新,但它只会根据表的配置写入磁盘(例如,如果您已将表格设置为仅保存一行的一个版本,则只会将最新版本写入磁盘) memstore的工作原理有很好的解释不,它不会删除和替换现有记录。它会将新的键值(记录数据)附加到memstore。 第一个原因:它可能被配置为保留一个单元格(列)值的多个版本。但是,即使memstore中的单元格版

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

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


memstore的工作原理有很好的解释

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

但是,请注意,在最新版本的HBase(0.92+)中,有一个memstore刷新过程的优化:它可能会跳过(不向HFiles写入)那些太旧的单元版本(即,考虑到要保留的最大版本数,不应包括在内)。此处的详细信息:。 尽管它似乎“覆盖”了Memstore中的现有值(至少从外部的角度来看),但它并不是这样做的。这种优化只在memstore刷新时发生,因此不会影响memstore大小:当写入新值时,它们总是附加。也就是说,这种优化不会导致刷新很少发生

这里正在进行与优化相关的工作,所以请关注下一个版本


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

这是一个很好的解释!顺便问一下,您提到的habse源代码的哪一部分正在维护Memstore?如果可能,请指出。我猜您要找的是org.apache.hadoop.HBase.regionserver.Memstore