为什么我们需要 Hbase 中的列族?

Why do we need column families in Hbase?

产生列族的原因是什么?示例:

场景 1:

Table Row-Key ColumnFamily1 ColumnFamily2 ColumnFamily3

场景 2:

Table1 Row-Key Column1...ColumnN
Table2 Row-Key Column1...ColumnN
Table3 Row-Key Column1...ColumnN

在场景一中,虽然一个table可以有很多列族,但是所有的列族都是分开存储的。那为什么会有列族本身的概念呢?为什么不能有简单的场景 2?同样对于场景 2,我不会阻止 HBase 提供的任何功能。您以后仍然可以添加动态列(以及其他功能)。

我唯一担心的是,如果列族是分开存储的,那么为什么它们在同一个 table 中?我只对拥有列族的目的是什么(以及它解决了什么问题)感兴趣?

A table,根据定义,是逻辑上属于一起的数据的组织单位。列族为您提供了一种在 table 中创建子结构的方法,以便根据您的访问模式优化性能(这就是它解决的问题)。

实际上,虽然 table 中的列族“分开”存储在不同的文件中,但它们也存储在“附近”,因为 HBase 将给定行的所有值存储在同一地区。这包括列族的单独文件。虽然它们在不同的文件中,但它们属于同一个区域服务器。

相比之下,如果您将数据分成不同的 tables,同一“行”的部分将位于不同的 HBase 区域中,并且在访问它们时您将支付在不同 HBase 上查找的开销集群中的区域服务器。

因此,如果您选择将部分数据放在单独的 table 而不是列族中,您不仅会以难以管理的方式组织数据,而且也失去了 HBase 的很多性能优势。