HBase的KeyValue分析

本文详细分析了HBase中的KeyValue结构,包括它的格式、占用空间的计算方式以及实现细节。KeyValue由keylength、valuelength、key和value四部分组成,Key自身又包含7个子部分。计算KeyValue大小时,要考虑KEYVALUE_INFRASTRUCTURE_SIZE、KeyDataStructureSize和vlength。短的rowkey、column family和column qualifier有助于节省存储空间。分析有助于优化HBase表结构设计。
摘要由CSDN通过智能技术生成

在HBase写入过程中,会检查Put中每个单元格Cell的KeyValue大小是否大于设置的maxKeyValueSize。要计算KeyValue的大小就需要了解KeyValue的的格式以及占用空间的计算方式。本文结合官方文档和源码对KeyValue的格式和空间计算进行分析和总结,便于后续继续分析HBase写入过程。

KeyValue的格式

KeyValue类是HBase中数据存储的核心,由keylength、valuelength、key、value四个部分组成,其中Key又由Row Length、Row、Column Family Length、Column Family、Column Qualifier、Time Stamp、Key Type七部分组成。
KeyValue不会在块之间拆分。例如,如果有一个8 MB的KeyValue,即使块大小是64kb,这个KeyValue将作为一个连贯块读取。
结构如下:

这里写图片描述
1、KeyLength存储Key的长度,占4B;
2、ValueLength存储Value的长度,4B;
3、Key存储具体的Cell数据:

1、 Row Length:存储rowkey的长度,占2B (Bytes.SIZEOF_INT);
2、 Row:存储Rowkey实际内容,其大小为Row Length ;
3、 Column Family Length:存储列簇Column Family的长度,占1B (Bytes.SIZEOF_BYTE); 
4、 Column Family:存储Column Family实际内容,大小为Column Family Length;
5、 Column Qualifier:存储Column Qualifier对应的数据。
6、 Time Stamp:存储时间戳Time Stamp,占8B (Bytes.SIZEOF_LONG);
7、 Key Type:存储Key类型Key Type,占1B ( Bytes.SIZEOF_BYTE),Type分为Put、Delete、DeleteColumn、DeleteFamilyVersion、DeleteFamily、Maximum、Minimum等类型,标记这个KeyValue的类型;
由于Key中其它的字段占用大小已经知道,并且知道整个Key的大小,因此没有存储Column Qualifier的大小。

4、Value:存储单元格Cell对应的实际的值Value。

示例:对于P

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值