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

时间:2014-07-01 12:19:36

标签: hbase hstore column-family hfile

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

RowKey-的ColumnFamily-ColumnQualifier-时间戳

所有这些信息都存储在每个条目中。 这就是为什么建议为列族和列限定符使用短名称以减少额外开销的原因。

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

2 个答案:

答案 0 :(得分:1)

与关系数据库一样,HBase中的表由行和列组成。在HBase中,列在列族中组合在一起。该分组在逻辑上表示为地图图中的图层。列族也在物理上表达。每个列族都在磁盘上获得自己的一组HFile。这种物理隔离允许一个列族的基础HFile独立于其他列管理。就压实而言,每个色谱柱系列的HF iles都是独立管理的。

答案 1 :(得分:0)

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