rocketmq 的索引策略

IndexFile 存储具体消息索引的文件,文件的内容结构如图:

索引结构

索引文件由索引文件头IndexHeader, 槽位Slot和消息的索引内容三部分构成

IndexHeader:索引文件头信息40个字节的数据组成

输入图片说明

beginTimestamp 8位long类型,索引文件构建第一个索引的消息落在broker的时间

endTimestamp 8位long类型,索引文件构建最后一个索引消息落broker时间

beginPhyOffset 8位long类型,索引文件构建第一个索引的消息commitLog偏移量

endPhyOffset 8位long类型,索引文件构建最后一个索引消息commitLog偏移量

hashSlotCount 4位int类型,构建索引占用的槽位数(这个值貌似没有具体作用)

indexCount 4位int类型,索引文件中构建的索引个数

槽位slot, 默认每个文件配置的slot个数为500万个,每个slot是4位的int类型数据

计算消息的对应的slotPos=Math.abs(keyHash)%hashSlotNum

消息在IndexFile中的偏移量absSlotPos = IndexHeader.INDEX_HEADER_SIZE + slotPos *HASH_SLOT_SIZE

Slot存储的值为消息个数索引

消息的索引内容是20位定长内容的数据![输入图片说明]

     4位int值, 存储的是key的hash值

     8位long值     存储的是消息在commitlog的物理偏移量phyOffset

     4位int值        存储了当前消息跟索引文件中第一个消息在broker落地的时间差

     4位int值        如果存在hash冲突,存储的是上一个消息的索引地址

转载于:https://my.oschina.net/makemyownlife/blog/1525218

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值