索引的理解
索引是什么, 索引实质是 相同数据的另一种存储结构
我们都知道读和写天然是存在矛盾的, 我们希望写的快,当然是顺序写的性能最高, 顺序写造成数据杂乱无章,没法按照一定的规律去找数。
如果想要找数的效率高, 必须要有结构组织的存放数据, 这样方便按规律找,业务需求又是多样的, 按照不同的查询诉求, 会对同一份数据异构成多份组织结构, 即多份索引,这样造成写入慢,读取快
rocketmq的索引
对于rocketmq的存储体系 commitLog和 comsumeQueue,就类型 聚簇索引 (全量数据)和二级索引的关系。 这是一种topic, queueid, offset构成的二级索引
如果想根据消息时间和msgkey这个维度来查询消息,就需要另外创建一种索引结构
每个Broker中会包含一组indexFile,每个indexFile都是以一个时间戳命名的(这个indexFile被创建时 的时间戳)。
每个indexFile文件由三部分构成:indexHeader,slots槽位,indexes索引数据。
每个 indexFile文件中包含500w个slot槽。而每个slot槽又可能会挂载很多的index索引单元。
indexFile的文件结构如下:
其中slots中的每个slot槽挂载的index索引单元都来源于indexes区中