Database design Hadoop Hbase:是否在表之间扩展列族

Database design Hadoop Hbase:是否在表之间扩展列族,database-design,hadoop,hbase,Database Design,Hadoop,Hbase,Hbase文档明确指出,应该将类似的列分组到列族中,因为物理存储是由列族完成的 但是,将两个列族放在同一个表中,而不是每个列组都有单独的表,这意味着什么呢?是否存在这样“分区”表更有意义的特定情况,以及一个“宽”表工作得更好的情况 单独的表应该产生单独的“行区域”,当某些列族(作为一个整体)非常稀疏时,这可能是有益的。相反,什么时候将列族聚在一起比较有利?您已经有了列族的概念:基本上,这只是提示HBase将这些项存储和复制在一起,以便更快地访问 如果将两个列族放在同一个表中,并且总是使用不同的键

Hbase文档明确指出,应该将类似的列分组到列族中,因为物理存储是由列族完成的

但是,将两个列族放在同一个表中,而不是每个列组都有单独的表,这意味着什么呢?是否存在这样“分区”表更有意义的特定情况,以及一个“宽”表工作得更好的情况


单独的表应该产生单独的“行区域”,当某些列族(作为一个整体)非常稀疏时,这可能是有益的。相反,什么时候将列族聚在一起比较有利?

您已经有了列族的概念:基本上,这只是提示HBase将这些项存储和复制在一起,以便更快地访问

如果将两个列族放在同一个表中,并且总是使用不同的键来访问它们,那么将它们放在两个单独的表中实际上是一样的。只有在同一个表中有两个通过相同键访问的列族,才能获得收益

例如:如果给定网站的总浏览次数、同一网站的唯一浏览次数、用户查看网站时使用的浏览器以及它们的internet连接都有相应的列,则我可以确定前两列是一个列族,后两列是另一个列族。在这里,所有四个都是通过相同的键访问的,即所讨论的web站点,因此我将它们放在同一个表中

如果它们在不同的表中,我将不得不对这两个表执行类似联接的操作。虽然我不知道具体的数字,但我无法告诉您类似连接的操作有多慢(因为我不记得HBase有一个连接,因为它是非关系的),以及将它们拆分为单独的表比将它们放在同一个表中更重要的转折点是什么(反之亦然)


当然,这一切都取决于您试图存储的数据,因此,如果您永远不需要跨表连接,您可能会希望将它们保留在单独的表中,因为您可能会认为它们一开始彼此之间没有那么大的关联。

列族是面向行访问与面向列访问之间的折衷。为了扩展Chris的网页示例,行访问将获取单个网站的所有数据(列)。以列为导向的操作的一个例子是将所有站点的页面浏览量相加

后一种操作不需要浏览器和连接详细信息,它们比视图计数的数值大得多,并且会显著影响查询性能。因此,HBase提供列族作为支持列操作的优化


至于这些列是否应该在同一个表中。。。我只需遵循正常的数据建模指导原则,如果所有列都是同一实体的属性,则将它们放在同一个表中。列族关注的是性能而不是模式。

您说“连接很昂贵”。这似乎意味着同一个表中的列组之间的“连接”要比跨表的列组连接便宜。是这样吗?我认为HBase文档没有明确说明这一点。我认为在同一个表中的列之间进行“连接”要便宜得多,因为它只是一个“获取”操作,两个列都命名为,并且是查询语言中的一个原语。”然而,Join不是一个原语,您需要自己实现它(这需要更多的操作)。“列族是关于性能而不是模式的。”直到您刚刚说出来,我才明白这一点。非常感谢。