Hbase文档清楚地表明,您应该将类似的列分组到列族中,因为物理存储由列族完成.
但是将两列列放在同一个表中是什么意思,而不是每列组有单独的表?有没有具体的情况,“分区”这种方式更有意义,而一个“宽”表更好的情况下?
单独的表应该导致单独的“行区域”,当一些列族(作为一个整体)非常稀疏时,这可能是有益的.相反,将柱家族聚集在一起是什么样的好处?
解决方法
您已经了解了列家族的想法:基本上这只是HBase的一个提示,用于存储和复制这些项目,以便更快速地访问.
如果将两个列系列放在同一个表中,并且始终有不同的键访问它们,那么它们在两个单独的表中是一样的.您只能通过在同一个表中通过相同的键访问两个列系列来获得收益.
例如:如果我有一个给定网站的网页浏览总数的列,同一网站的唯一视图数,用户用来查看该网站的浏览器以及他们的互联网连接,我可以决定我想要前两个是列家庭,最后两个是另一个列家庭.这里所有的四个都是通过相同的密钥访问的,即所讨论的网站,所以我在同一张表中获得这些信息.
如果它们在不同的表中,我将最终不得不在两个表上执行类似于join的操作.我真的不知道这些数字,所以我不能真的告诉你连接类操作的速度是多少(因为我不记得HBase有一个连接,因为它是非关系的)和什么是转折点是在哪里分裂他们成为分开的表超过了他们在同一个表(反之亦然).
当然,这一切都取决于你要存储的数据,所以如果你永远不需要加入到这两个表中,你可能希望将它们保存在不同的表中,因为你可能认为它们不是彼此相关的首先.