HBase列族 - 在模式定义时声明 - 为什么?

时间:2013-01-07 13:54:58

标签: hbase

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

1 个答案:

答案 0 :(得分:5)

列族是表格架构的一部分。您可以在运行时使用在线架构更改添加它们。但是你不能动态地添加它们,就像你在HBase表中动态创建新的“列”一样,如果这是你的想法。

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

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