00:02
好,那下面我们来看这个index。那这个引出啊,索引啊,我们。可以看一下啊。这个目录是吧,然后在这里边现在有一个文件。大家看这个文件,这个文件啊,文件名和我们之前建的啊con log文件,Consume文件都不一样是吧。这个你看看看的像是什么,像是个时间2021。然后零六,然后26是吧,现在这个时间,那确实是个时间啊,这是个时间戳。那么这个是干嘛的啊,索引是吧,因为索引呢,索引呢和谁肯定和谁有关系,和我们这个commit log是有关系的。但是我们前面不是已经说出那个索引了。
01:04
嗯,我们。这不是有索引条目吗?Q,里边不是有索引条目吗?你注意啊,这俩不一样。这里边儿这个索引啊,啊是消费的时候是就是正常依次按序消费。而我们这儿说的fair啊。这个是什么?这个是根据我们消费者啊,根据消费者指定的K进行消费。你要你要消费这个指定key的消息,那你就得查询到他。所以我们这个是干嘛的。啊,你看除了通过通常的指定进行消息消费者以外啊,我们热Q还提供了根据。进行消息查询的功能,你你根据K查询到这个消息,我就可以消费这个消息了。该查询是。通过啊,这个这个。
02:02
到目录下的index子目录就d fair来进行所以实现的快速查询。呃,他尔说了啊,当然这个index的索引数据啊,是包含在。呃,是是包含了,包含了K的消息。包含了是在包含了K的。消息被发送到博客时,写入的就是这个里边内容啊。是什么时候写进去的?啊,是生产者生产消息的时候就已经指定了。把你这个消息他的K,所以是在什么啊,包含了。加上半个句。是在包含了K的消息被发送到博时泄露的。那你生产的时候写到它里边。如果里面没有指个,就不会写到里。
03:05
呃,这是大体它是做什么的啊,In解决什么,根据key进行查询的啊,那么我们看一下啊,这这个文件,就我们说这个文件啊,这个文件。他的,呃。结构。啊,这个索引条目啊,索引条目结构,实际上索引条目结构。呃,我们。其实叫叫in结构啊,可能会更好一些,就这吧,啊一个意思啊。这里面介介绍东西比较多。那么我们看啊,这个每个broke里边会包含一组index,就是它里边会包含多个。会包含很多的这个index。每个人的都是一个,你看时间戳命名的。它是以。以时间戳。
04:01
命名的。呃,每个当然这个时间戳是个什么时间戳呢?是这个文件啊,这个文件创建的时间戳。这个。Thanks。呃。创建。是的。时间。但这个有什么用啊,我们一会儿会详细给大家说。那么每个代啊文件由三部分构成。In。S槽位和index引数据就这三部分。这三部分啊,Index head slots,曹伟和indexes。每个代file里边包含,注意啊,这是多少百万五百万个lo的草。是500万个啊,就它这有段有500万个槽,而每个料槽又可能会挂在很多的index索引单元,就它。
05:09
每一个下边会挂很多的缩引单元。其实就这个样,这下面挂很多的索引单,每一个都是一个索引单元。当然他这个啊。因为因为这个这整体这是这个index这个文件啊,啊前面前面是多少啊,给大家说这个index header固定是40个字节,就是这个是40个字节。然而这个los啊,S槽是多大的?大家看每个料槽槽位是四个字节,比如说这段是500万,所以它的大小是500万乘以。四这么多字节,这是固定的啊。但是这个。是不固定的。这个是不固定的,为什么?因为每一个槽。
06:00
它下边挂载的这个,所以单元数量是不一样的。所以你这个就就不好。就不好这样了,就是我一个槽,哎,比如说这个它这个文件结构啊,不好这样安排。哎,我这啊,这前面是index紧接着。啊,这是一个槽,Slot后边我给你留留开足够的位置让你放什么,放它下边挂载的啊index单元,然后这又是个槽,呃,下面再给你留开留开逐够的呃空间,让你放它下边挂载的这些index单元。因为因为你每个下面挂载多少不确定。所以你这个留的这个空间,预留这个预留多大合适呢。他有的会很多,有的是没有。所以他把所有的这些index单元放到哪集中放到了这个lo槽的后边。
07:05
那这个是可以无限放的。这是可以无限放。所以这是我们,呃需要。是需要需要需要,呃,了解到的一点啊,就是整体结构上。啊是什么样的是吧。紧接着啊,这个刚才说过了,这个在猜里边固定是40个字节,里边放了什么数据,我们看一下。呃,就是我依次给大家列到这啊,那这个是什么?Index里边第一条消息。第一条消息,它的存储时间。第一条消息的存储时间,这是最后一条消息它的存储时间。对吧,然后这当然这个最后一条啊,是指的目前最后一条啊。然后这个呢,是第一条消息在commit log里边的。一量啊,就是我们的log of set。其他位置啊。这是最后一条消息。
08:01
在里边的啊。然后这个haslot caught。这是什么?这个是啊,不是has啊,是哈希啊哈希,呃,S count是已经填充。啊,已经填充的这个index的数量,呃,什么意思,已经填充index啊就是。就他吧。的。不是所有的lo潮下班都有。所以单元。有些是没有的。所以有的,哎,我都给你统计下。哎,这是什么?已经有了啊,下边挂载了有这个slot,呃呃,挂挂载了这个呃,Index啊呃,这个索引单元的这些slo它的数量啊,它给你放到这儿啊啊这个。
09:00
嗯。呃,就是。并不是。呃,每个。Slot。呃,朝朝下。都。发展有。Index。所以。啊,这里。呃,统计的是。所有。挂载。挂在了index。所以单元。Slots。草。数量,哎,就是这个东西啊,然后呢,该index这个index count是该index中包含的所有的个数,这个也就好理解了。
10:05
而是什么呢?我这统计啊,所有这是统计的所有的料的槽。下边挂载的所有的。啊一那所有单元它的数量之和就是它这挂了三个,他这挂了四个。这个里边没有,哎,这里边挂了俩,我得把这234加一块0234我加一块,所以这个是是是是什么是。呃。统计出。呃。当前你注意是当前啊呃。Dex在中。所有。Slow。朝下。挂载的。所有啊。Index。所以。单元的。数量。
11:00
之和。你就他要的是这样一个东西啊,要的这样一个东西。呃,就是这几个啊,意思我们清楚了。那么。再看它。再看这就是我们的具体的槽了啊,Index里边。最复杂的是谁,是这个slots和indexes啊,他们之间的关系,也就是这个slots和这个indexes啊之间的这个关系。呃。在实际存储的时候,Index。呃,是在lo后面的,是为了便于理解,呃,这样为了便于理解,呃,我把这个图啊,来把这个图给大家这样来画。大家看啊,这个里边是这样的,这边是这样的啊,就这个这个数据是怎么样写进来的,就你生产者发送的数据啊,过来以后,它不是里边包含这个key吗。
12:01
所以我这有key的哈希值。K的含义值,然后和谁和500万。曲魔。K的黑值和500万曲模。这个结果是谁?就是我们获得的斯洛曹魏。那你是应该放到第几个槽里边,其实大家看这个结果啊,类似于什么,就是类似于那个哈西脉吧。将该lo值修改为该index所引单元的index,这里面有个index number啊,有个index。呃,这个number是个什么东西啊,Number啊,它就是一个像一个流水号。
13:05
In number,它就是一个流水号。呃,而且这个流水号是整个。In是基于整个的。写一句啊。呃。Index number。而是一个。在。Ex中的。嗯。流水号。什么叫60号?那就依次递增呗,然后从零开始。呃,这个这个。依次递增吧。一次递增。呃,也就是说啊,也就是说在一个index。中所有。
14:02
Number。是什么?是是是嗯。一四。嗯。第一次就是它它整个整个文件里边这个index number啊呃,是一次递增的。那这个有有什么用,我们一会儿要说到啊。就是从零开始,有可能它是啊,它是零啊,有可能它是零,然后呢,呃,然后它的Internet number是零啊,它的是二啊,他的是五,他的是一。啊,它是六,呃,它是八是吧,它整体是依次递增的啊。然后根据这个Internet number可以计算出该Internet单元在Internet file里边的位置。
15:06
根据这个东西能计算出来它的位置,这我们一会儿再给大家详细说啊,后边会说,不过该曲目的结果你注意这关键在它的重复率很高,因为不同的K啊。不同的key。它的哈希值和500万曲模。它有可能会重,比如说啊,假设啊,我的这个K,它的含义值是几是一。你的那个K,它的含义值是多少?是501。你另外一个含义值,另外一个K的含义值是什么?是1001,那大家想想这三个含义值。和500万取模的结果是不是都是一?那就重了呗,所以曲目的结果重复率很高。为了解决这个问题。在每个index。索引单元中增加了一个叫pre in pre之前的。
16:01
指定该中当前。前提都是在这个slot啊,在这个slot里边指向的是这个slot里边。啊,指定啊,用于指定该lo中当前代词所引单元的前一个所引单元。那只阳看的前一个。只要他的前一个,注意都是前一个,不是后一个,不是下一个啊,是前一个。所以你看这个图画起来很奇怪,他这样这样往前走的。对吧,不是下一个啊,不是下一个。而slot始终存放的。是。Lo中啊,始终存放的是旗下最新的index所的in number,也就是说它里边放的始终是最新的,这是最新的,我是把你的这个Internet number我就放到S。这个slot啊,这个这个作为它的值出现啊。这样的话,只要找到了slot,就可以找到其最新的index算单元,或者可以找到最新的这个单元。
17:06
而通过这个索引单元,就可以找到其之前所有的index索引单元。是不是啊,这就是这个结构啊,这个结构我们大家先要啊,这个这个这个了解。在这里边啊,就是。他他他这个东西之前的之前的就是也是说这个东西是和时间是有关系的啊。它是和时间有关系的。那么具体。是吧,呃,具体呃。我我们我们看这。看这啊,就是这个时间有什么用处。是吧?你看index所有单元默认是20个字节,默认20个字节,其中存放的是以下四个属性。这四个四个里边key哈希这K的哈值没啥可说的是吧,然后这个啊。
18:01
这个R是什么?是key啊,在里边便移量。在lock里边这个key对应的消息啊,在里边这个便移量。注意点和时间有关系了,这个。看。这什么,当年可以?对应消息的存储时间,就你这个消息啊,什么时候生产的就存储时间。与当前代创建时间的时间差,注意我们这个代它是不是一个一个一个时间值啊。哎,你担心这个时间。和你这个文件的创建时间的。时间差值。实验差距。明白吧,啊,就是这样一个啊,就是这样一个。呃。紧接着。呃,Index index在前一个啊,索引单元就像它的前一个索引单。
19:01
不过我这里面有个疑问啊,大家看一下,你看你有这个问题没有。就这个,所以你单元里边你看它,它指向前一个,他只向前一个是吧。那那这里边好像没有发现index number啊。这这里面只有四部分,没有index number index number。没有的话,我怎么指向他呢?是不是比如说这只要第五个,我得找第五个,你在这里面能标开它第五个才行啊。是不是注意啊,它是这样的。这又回到我们刚才说这儿了。这啊,它是什么。他从这开始依次往后存放的。就你不管哪一个slot下边要挂载一个新的index。啊,缩影单元。这个索引单元它都会接着原来的就放到文件的加载到,呃,我们追加到这个文件的最后。都接着往后放。
20:01
接着往后一放,放多少。一放就放20个字节。这难么?放20个字。然后呢,他放20个字节,就是你来一个,我就往后放20个字节,来一个往后放20个字节。那么这个number是怎么来的?是数出来的?对证的第一个number。低代就是零。第二个就是一,第二个呃,第三个二,第四个三,那这样数出来的不用给他加。加这个具体的给你在这里面体现,挨着挨着数数出来的,当然这个挨着数出来,他他。那那怎么用它呢。那这个我们需要一会儿啊,说具体的查询流程的时候,再来说这个怎么怎么使用啊。这是。这是呃,我们需要注意的这个地方吧,就in that number are。
21:01
在,呃,所以。在index。啊,所以。单元中,嗯,是没有,嗯。体体现是没有。体现的。嗯,其是通过。呃,这个in taxes。而中啊,依次。数出来的。依次数出来的啊,这个大家需要。呃,知道我们一会儿啊,要用一会儿要用它啊。
我来说两句