Hbase列系列

Pra*_*shT 9 hbase

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

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

Chr*_*ain 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中找到.

因此,正如在所有这些性能情况中一样,在确定"正确"路径之前进行测量.

  • 你应该不必担心阅读整行.HBase非常善于阅读它实际需要的东西.如果您需要读取的单元格在内存中,HBase根本不会执行额外的磁盘IO. (2认同)