开发者社区> 问答> 正文

HBase的KeyValue字节数组设计是怎样的?

HBase的KeyValue字节数组设计是怎样的?

展开
收起
令人无语的八阿哥 2021-10-22 15:39:45 387 0
来自:华章出版社
1 条回答
写回答
取消 提交回答
  • 以HBase为例,这个字节数组串设计如下图所示。

    image.png

    总体来说,字节数组主要分为以下几个字段。其中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

    2021-10-22 16:03:05
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
+ 订阅
问答排行榜
最热
最新

相关电子书

更多
大数据时代的存储 ——HBase的实践与探索 立即下载
Hbase在滴滴出行的应用场景和最佳实践 立即下载
阿里云HBase主备双活 立即下载