HBase如何内部管理版本?

时间:2013-06-06 09:17:06

标签: hadoop hbase

让我们说一个值发生了更新,它属于

RowKey 1288,
ColunumFamily cf1
Qualifier  Q1

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

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

  2. 更新仅在mem商店中进行?在重大压缩过程中,HFiles会更新mem store中的更新日志吗?

  3. 还有其他机制吗?

1 个答案:

答案 0 :(得分:0)

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

当您想访问使用< 1288,cf1,Q1>时,HBase将通过扫描HFile来读取所有版本(确切地说,HFile中的行键范围,时间戳和bloomfilter将帮助HBase快速判断是否存在行键在某些HFile中)。最后,默认情况下,它会返回最新的值给您。此外,您可以要求HBase返回更多版本。

如果您想了解HBase中的机制,建议您阅读有关bigtable的文章。之后,您可以阅读HBase: The Definitive Guide第8章 架构和The Apache HBase™ Reference Guide第9章架构