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

0 hbase

HBase的,文件中提到宣布在架构definiton时间列家庭.我不明白为什么?我知道,列族继承了多个列(可以在运行时添加)并且它们被映射到存储文件.但是由于什么原因,cf不能在运行时添加?

tsu*_*una 5

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

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

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