HBase:为什么每列都存储了rowkey?

时间:2015-08-09 09:13:06

标签: hbase

我试图减小HBase表的大小并遇到过这个问题:

http://prafull-blog.blogspot.co.uk/2012/06/how-to-calculate-record-size-of-hbase.html

表示为表中的每一列存储了rowkey。这看起来非常浪费,并且需要我特别注意添加到rowkey的每个字节,因为添加到表中的字节数将是存储的列总数。此外,我希望每一行都作为文档存储在数据库中的单个密钥下,但这并不是这样。那么,为什么这样实现呢?

2 个答案:

答案 0 :(得分:2)

毫无疑问,对于HBase架构而言,rowkey设计是最重要的决定。您是否尝试过启用DATA_BLOCK_ENCODING => 'PREFIX'作为一种去除磁盘上行键字节的方法?

答案 1 :(得分:0)

HBase是一个面向列的数据库。因此,即使您有行和列视图,数据在内部存储的方式也不同。实体被设计为以单行存在。但是,存储是在记住列的情况下完成的。当区域服务器出现时,列族是对事物进行分组的扩展。由于每个列族都存储在单独的区域服务器中。

Hbase也是基于行键索引的。每个列限定符都有其行键信息,查询时,每个单元格独立的结果更快。