HBase中的Memstore如何更新记录?

时间:2012-07-16 23:22:23

标签: hbase

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

2 个答案:

答案 0 :(得分:1)

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

但是,请注意,在更新版本的HBase(0.92+)中,存在memstore刷新过程的优化:它可能会跳过(不写入HFiles)那些太旧的单元版本(即不应该包括给定的最大版本数量)。更多相关信息:HBASE-4241。 虽然它似乎“覆盖”了Memstore中的现有值(至少从外部角度来看),但它并没有完全这样做。此优化仅在memstore刷新时发生,因此不会影响memstore大小:写入新值时,它们始终会附加。即这种优化不会导致冲洗更少发生。

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

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

答案 1 :(得分:0)

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

有关memstore如何工作here

的详细解释