Hbase 文档表示,避免创建超过 2-3 个列族,因为 Hbase 不能很好地处理超过 2-3 个列族。其原因在于压缩和刷新,以及 IO。但是,如果我的所有列总是填充(对于每一行),那么我认为这个推理并不那么重要,因此,考虑到我对列的访问是完全随机的(我想访问列的任意组合) - 我可以有一个列族 - 单列配置(有效地尝试使其成为纯柱状)。
有许多博客/维基对此进行了解释,但它们似乎都相互矛盾并增加了更多的混乱。我只是似乎无法消化Hbase更喜欢一个列族的事实,那么调用列存储有什么意义呢?
目前(尽管这种情况预计会改变),一个区域的所有列族都被刷新在一起。这就是人们说“HBase 不能很好地处理超过 2 或 3 个列族”的主要原因。考虑两个 CF,每个都有一列。 A列:A存储整个网页文本。 B:B 列存储页面中的字数。因此,每次我们刷新 A:A 时(这种情况会更频繁地发生,因为 A:A 的数据要大得多),我们还需要为 B:B 列执行整个单独的文件 I/O 处理路由,即使没有需要——如果 B:B 只持有数字,我可以几个月不冲掉它。
如果将 A 和 B 存储在同一列族(A:A 和 A:B)中,您可能会看到更好的刷新 I/O 性能,并且因为大多数 HBase 读取纯粹来自 memstore,您可能会发现读取速度是相等的。
另外,也许更重要的是,如果列的基数差异很大,那么您的区域服务器将需要为密度较低的列族维护无用的大部分为空的文件。这永远不会改变。
所有这些都可以在HBase书籍 http://hbase.apache.org/book.html#number.of.cfs.
因此,就像在所有此类表演情况下一样,measure在决定什么是“正确”路径之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)