拥有列族的原因是什么?示例:
场景1:
Table Row-Key ColumnFamily1 ColumnFamily2 ColumnFamily3
场景2:
Table1 Row-Key Column1...ColumnN
Table2 Row-Key Column1...ColumnN
Table3 Row-Key Column1...ColumnN
在场景1中,尽管一个表可以有许多列族,但所有列族都是单独存储的。那么,为什么会有柱族本身的概念呢?为什么不能有简单的场景2?对于场景2,我不会阻止HBase提供的任何功能。以后仍然可以添加动态列(以及其他功能(。
我唯一担心的是,如果列族是单独存储的,那么为什么它们在同一个表中?我只对拥有柱族的意图感兴趣(以及它解决了什么问题(?
根据定义,表是逻辑上属于一起的数据的组织单元。列族为您提供了一种在表中创建子结构的方法,以便根据访问模式优化性能(这就是它解决的问题(。
在实践中,尽管表中的列族被存储为"列";单独地;在不同的文件中;附近的";在HBase将给定行的所有值存储在同一区域的意义上。这包括柱族的单独文件。尽管它们位于不同的文件中,但它们归同一个Region Server所有。
相比之下,如果你把数据划分成不同的表,那么同一个"表"的部分;行";将居住在不同的HBase区域,当访问它们时,您将支付在集群中不同区域服务器上查找的开销。
因此,如果你选择将一些数据放在一个单独的表中,而不是列族中,你不仅会以一种难以管理的方式组织数据,还会失去HBase的许多性能优势。