HBase的KeyValue字节数组设计是怎样的?
以HBase为例,这个字节数组串设计如下图所示。
总体来说,字节数组主要分为以下几个字段。其中Rowkey、Family、Qualifier、Timestamp、Type这5个字段组成KeyValue中的key部分。
keyLen:占用4字节,用来存储KeyValue结构中Key所占用的字节长度。
valueLen:占用4字节,用来存储KeyValue结构中Value所占用的字节长度。
rowkeyLen:占用2字节,用来存储rowkey占用的字节长度。
rowkeyBytes:占用rowkeyLen个字节,用来存储rowkey的二进制内容。
familyLen:占用1字节,用来存储Family占用的字节长度。
familyBytes:占用familyLen字节,用来存储Family的二进制内容。
qualifierBytes:占用qualif ierLen个字节,用来存储Qualifier的二进制内容。注意,HBase并没有单独分配字节用来存储qualifierLen,因为可以通过keyLen和其他字段的长度计算出qualif ierLen。代码如下:
qualifierLen = keyLen - 2B - rowkeyLen - 1B - familyLen - 8B - 1B
timestamp:占用8字节,表示timestamp对应的long值。
type:占用1字节,表示这个KeyValue操作的类型,HBase内有Put、Delete、Delete、Column、DeleteFamily,等等。注意,这是一个非常关键的字段,表明了LSM树内存储的不只是数据,而是每一次操作记录。
Value部分直接存储这个KeyValue中Value的二进制内容。所以,字节数组串主要是Key部分的设计。
资料来源:《HBase原理与实践》,文章链接:https://developer.aliyun.com/article/724670
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。