我必须每月在HBase表中存储有关实体的信息。我想处理目前为止使用mapreduce逻辑的实体的所有月份详细信息。我很困惑是否选择高窄或扁平的宽设计HBase表。
使用平面广泛的方法,实体ID将作为行键和月份ID保留为列限定符,详细信息保留为限定符值。在HBase-mapreduce中,我可以获取地图和流程中实体的所有详细信息。
高度狭窄的方法是将行密钥存储为实体ID和月份的组合。此外,详细信息将存储在一个单独的列中。在HBase -mapreduce中,我必须在map中获取entiy的详细信息,并在reducer中为所有月份汇总。
哪种方法更好,性能更好?提前谢谢。
答案 0 :(得分:3)
一些假设:
我认为Flat-Wide
表方法会产生更好的结果。
设计一个扁平的宽表意味着你所有的实体数据都在一行中(这就是为什么重要的是大小并不大。如果我没记错的话,HBase会按照每列系列的数据存储数据,这就是水平发生压缩的地方.. Suggestions on performance optimization section下的更多信息。由于您拥有rowkey-column系列列量词信息,因此您应该能够快速获取任何实体信息。假设实体标识符要么经过哈希处理(或者用哈希作为前缀),您也应该能够阻止monotonically increasing个键值。
关于运行MapReduce作业。由于此时您的数据在所有区域服务器上均匀分布,因此您的计算也将分发。意味着所有机器同样可能正在做同等数量的工作。但是,您也可以使用Tall-Narrow
模型(假设您正确设计了模式)。