0

HBase 文档提到在模式定义时声明列族。我不明白为什么?我知道,列族继承了多个列(可以在运行时添加)并且它们被映射到存储文件。但是由于什么原因cf不能在运行时添加?

4

1 回答 1

5

列族是表架构的一部分。您可以通过在线模式更改在运行时添加它们。但是,如果这是您的想法,您不会像在 HBase 表中动态创建新“列”那样动态添加它们。

列族是架构的一部分并且需要更改架构的原因是它们深刻地影响了数据在磁盘和内存中的存储方式。每个列族都有自己的 HFile 集,以及 RegionServer 内存中的自己的数据结构集。动态创建或开始使用新的列族会非常昂贵。

仅当您需要对表的不同部分进行不同的配置时(例如,您希望某些列具有 TTL 而其他列不过期),或者当您想要控制访问的局部性(一起访问的东西应该更好)时,才需要列族如果您想要良好的性能,请在同一个列族中,因为操作成本随着列族的数量线性增长)。因此,同样,由于这些特殊原因,在运行时动态添加新的列族是没有意义的,就像在族中添加常规“列”一样。

于 2013-01-17T05:47:36.543 回答