0

假设一个值发生了更新,它属于

RowKey 1288,
ColunumFamily cf1
Qualifier  Q1

现在其中一个值发生了变化,HBase 如何跟踪这个变化?

  1. 是否通过更新移动到另一个 HFile,从所有可能的 HFile 中获取所有值并1288 -> Cf1 -> Q1带有时间戳并响应最新的。

  2. 更新仅在内存存储中进行?在 Major Compaction 期间,HFiles 会使用 mem store 中的更新日志进行更新?

  3. 还有其他机制吗?

4

1 回答 1

0

在您的示例中,当第一次插入值时,HBase 将存储 <1288, cf1, Q1, v1, timestamp, PUT>。如果将 v1 更新到 v2,HBase 将追加一条新记录 <1288, cf1, Q1, v2, timestamp, PUT>。它在内存商店中。如果 memstore 已满,它将被刷新到 HFile。

当你要访问use <1288, cf1, Q1>时,HBase会通过扫描HFiles来读取所有的版本(就是HFile中的row key range、timestamp、bloomfilter会帮助HBase快速判断一个row key是否在一些 H 文件)。最后,默认情况下,它会返回最新的值给你。此外,您可以要求 HBase 返回更多版本。

如果你想了解 HBase 中的机制,我建议你阅读关于bigtable的论文。之后,您可以阅读HBase: The Definitive Guide CHAPTER 8 Architecture 和The Apache HBase™ Reference Guide Chapter 9. Architecture

于 2013-06-06T13:20:32.303 回答