为什么HBase需要为每个Value存储Column Family?

use*_*764 5 hbase hstore column-family hfile

因为HBase表是稀疏表,所以HBase不仅为每个单元存储值,而且存储识别单元所需的所有信息(通常称为Key,不要与RowKey混淆).Key如下:

RowKey-的ColumnFamily - ColumnQualifier时间戳

并且为每个条目存储所有这些信息.这就是为什么建议使用列族和列限定符的短名称来减少额外的开销.

我的问题:为什么我需要为每个条目存储ColumnFamily?据我所知,每个商店文件都属于一个列族.每个商店文件存储一次列族名称是不够的?这样可以减少开销,可以使用任意列族名称,我们仍然可以为每个条目识别列族.我在这里错过了什么?

b4h*_*and 0

我认为原因可能只是由于简单性以及关键结构直接映射到 RPC 表示这一事实。在写入之前删除列族并在读取后重新创建它需要更多的内部复制和翻译。我猜测性能权衡比听起来更重要,但我不知道 HBase 开发人员是否尝试过这种特殊的变体。我确实知道,如果您担心列族和列的空间,您可以打开数据块编码以最小化开销。您还可以查看Kiji 项目,它可以为您缩短这些名称,并为您的代码提供翻译层,这意味着您仍然可以使用更长的名称,而不必担心成本。