Hbase列系列

时间:2012-03-05 14:49:22

标签: hbase

Hbase文档说,避免创建超过2-3个列系列,因为Hbase不能很好地处理超过2-3个列族。其原因是压实和冲洗,因此IO。但是,如果我的所有列总是被填充(对于每一行),那么我认为这种推理并不重要,因此,考虑到我对列的访问是完全随机的(我想访问任何列的组合) - 我可以有一个列族 - 一列配置(有效地尝试使其成为纯柱状)。

有许多博客/维基解释这一点,但它们似乎都相互矛盾并增加了更多的混淆。我似乎无法消化Hbase更喜欢一个列系列的事实,那么调用的重点是列存储?

1 个答案:

答案 0 :(得分:21)

目前(虽然预计会发生变化),区域的所有列系列都会刷新在一起。这是人们说“HBase不超过2或3列家族”的主要原因。考虑两个CF,每个都有一列。 A栏:A存储整个网页文本。 B列:B存储页面中的单词数。所以每次我们刷A:A(这将经常发生因为A:A的数据要大得多),我们还需要经历一个完整的单独文件I / O杂项路由到B列:B,即使没有需要 - B:B只持有数字,我可以连续几个月没有冲洗它。

如果将A和B存储在同一列族(A:A和A:B)中,您可能会看到更好的刷新I / O性能,并且因为大多数HBase读取纯粹来自memstore,您可能会发现读取速度相当。

此外,也许更重要的是,如果列的基数差别很大,那么您的区域服务器将需要为密度较小的列族维护无用的大多数空文件。这永远不会改变。

所有这些都可以在HBase Book中找到。

因此,在所有这些性能情况中,测量然后再决定“正确”路径是什么。