HBase 表设计 - 高窄与平宽方法



我必须每月在HBase表中存储有关实体的信息。我想使用 mapreduce 逻辑处理到目前为止可用的实体的所有月份详细信息。我很困惑是选择高窄还是平宽设计作为HBase表。

使用平面宽方法,实体 ID 将保留为行键,月份 ID 保留为列限定符,详细信息保留为限定符值。在HBase-mapreduce中,我可以获取map和进程中实体的所有详细信息。

高窄方法将行键存储为实体 ID 和月份的组合。此外,详细信息将存储在单独的列中。在HBase -mapreduce中,我必须在map中获取entiy的详细信息,并在reducer中聚合所有月份。

哪种方法更好,效果更好?提前谢谢。

一些假设:

  • 您有许多实体,并且希望每月保存一次其状态
  • 您希望从MapReduce作业中获得的结果将聚合这些实体,并根据月份保存信息,例如,2013年1月的数字(在所有实体中)是多少。
  • 您每月不会为每个实体存储大量信息

我认为Flat-Wide表方法会产生更好的结果。

设计一个扁平而宽的表意味着所有实体数据都保留在行中(这就是为什么大小不大很重要的原因。如果我没记错的话,HBase 以每列系列的块形式存储数据,这是发生压缩的级别..有关详细信息,请参阅性能优化建议部分)。由于它们在一起,您应该能够快速获取任何实体信息,前提是您拥有行键列系列列量词信息。此外,假设实体标识符是散列的(或者你用散列作为前缀),你也应该能够防止单调增加键值。

关于运行MapReduce作业。由于此时数据均匀分布在所有区域服务器上,因此计算也将分布。这意味着所有机器同样可能做相同数量的工作。但是,您也可以使用Tall-Narrow模型来获得它(假设您正确设计了架构)。

相关内容

  • 没有找到相关文章

最新更新