RocketMQ BuildIndex的一个过程
2020-11-12 11:21:06 9 举报
RocketMQ BuildIndex的过程
作者其他创作
大纲/内容
20000140
计算出20000060,然后封装索引将索引写进去
indexService
20000080
indexFileList
MappedFile
发现这个位置上没有东西,说明这个消息第一次存的
56
indexFile
20000120
52
现在我们又有一个索引,计算出来的hash槽也是0,跟indexCount=1的那个索引是一个hash槽,还是先将hash槽里面值取出来,然后封装索引的时候将从hash取出来的那个值,也就是索引1的那个indexCount值封装到这个索引中,比如这个索引的时候已经是第5个了,也就是indexCount=5,这个时候算出来20000140位置
比如说有个某某消息要构建索引,然后先是根据这个消息的topic与msgId生成一个key,hash(key)生成一个hash值,使用hash值%hash槽的数量就能得出这个hash值在哪个hash槽上面,比如说我们算出来的hash槽是0,然后根据header大小 + 槽* 每个槽大小计算出hash真实的位置是40
这个时候去这个位置上取出对应的值
20000100
接着将indexCount写入你那个hash槽中
20000060
48
....
将索引写入20000140位置
44
.....
header40字节
40
接着将indexCount写入hash槽中
接着就是看看header头indexCount的值,它默认是1的,每增加完一个索引就+1,计算出这个索引所在的一个位置,比如说我们就是第一个索引,计算位置的公式就是header大小(40)+hash槽大小(4)*hash槽数量(500w)+indexCount*一个索引的大小(也就是20)
0 条评论
下一页