首页 > 技术文章 > RocketMQ IndexFile ByteBuffer的Hash存储结构

leodaxin 2022-03-08 21:00 原文

 

 

 

1:Header是一个固定长度的Byte数组,具体数据结构参考IndexHeader实现

2:Slot是一块连续Byte数组用于存储Key/Value存储结构,其中Key是一个hash(key),Value是当前元素是第一个索引(也就是当前索引的序号),存储序号目的是便于检索,后面会详细描述。

3:Index也是一块连续Byte数组,用于存储每一个Index数据单元,一个数据单元具体结构如下:

 

其中第一个块是hash(key)用于过滤的key的,最重要的是Slot Value部分,Slot Value则存储的是上一个hash(key)相同的Index unit的序号,这样就通过Slot Value将相同hash(key)的所有Value连接了起来。

 

其中timeDiff也是一个比较重要的字段,timeDiff存储的是一个消息的存储的是时间差值,timeDiff = storeTime - header里面的beginTimestamp(beginTimestamp字段是在IndexFile添加第一个消息索引文件的storeTime,然后就以这个时间为基值,然后使用timeDiff存储便宜,这样就可以计算消息的时间了)。一个消息的时间为:storeTime=header.beginTimestamp (基)  +  timeDiff(偏移)。

 

 

推荐阅读