00:02
好,下面我们来看啊,这个到底是怎么样查询的,查询的流程是怎样的。那当消费者啊,通过业务P来查询相应的消息的时候,需要经历啊,需要经过一个相对较复杂的查询流程。呃,这说了,在我们说这个产业流程之前,需要清楚几个。定位呃,计算式子啊,先说啊。计算指定消息K的slot槽位序号。这这个我们在在这儿刚说过,这个在这是吧,你在哪个槽,我拿你的K。拿你的K的含义值和500万啊取模,这就是你的槽位,所以我们看呢,就这是吧,我拿含义值啊,你的K的含义值和500万也一曲模,然后就就就知道你是第几个槽位了是吧,就零一,这不是500万减一,就它的槽位序号是吧。
01:03
所以这个很简单啊,然后呢,计算第二个啊,计算槽位序号为N,槽位序号为N的slo的field。其实位置。也就是说,我们要计算谁呢?槽位序号为N。的这个曹伟啊在哪,在这个里边。那你是在哪,哎,在在在这个位置是吧,在这。而且财富在这个位置,你你怎么知道在这个位置啊,你得算呢。是不是,哎,你算算你第几个槽位,因为我们每一个槽位啊,它它是40个字节是吧,然后紧接着每个槽位的大小是四个字节。那你是第N个曹位?所以40加上什么N减一乘以四。是不是就是你那个。
02:00
曹位。那具体的位置。对吧,呃,你你要你要你要知道啊。这个40。什么意思?这个40啊,40是是是这个。呃,就index啊,它的那个自觉。呃,40为。嗯。Index index。嗯,对。In Texas。还等。是吧?八。再看它计算index number啊为M。就M个啊,DM个这个这个索引啊,你这个index啊,你的索引单元,呃,在index里边的位置,那这个也好说。那这个我们大家知道,首先啊。是在这这块里边的,那前面这40这段。
03:03
这500万乘以四,这俩就已经固定好了。再往后你每一个。Index单元长度是20。每一个是20啊,所以你第M个。所以是什么?40加上500万乘四,然后M减一乘以20。对吧,所以这里边儿我们这个。拷贝一下啊。500万乘四。是什么?嗯。呃,是。所有。A slots。所占的。对吧,哎,这我们先把这个啊说清楚了,然后我们再来看下边这个具体这个流程啊,这个流程比较复杂,老来给大家画了个图,画了流程图,我们直接看这啊。
04:01
这图看的清晰一些。大家看首先啊啊,我们输入UK与要查询的时间,我们有时间,我要查这个时间之前,那么要开始查询。然后呢,首先根据常用的时间。我们需要根据传的时间找到相应的。那那也就是说我们这里边需要找谁呢?需要找这个文件并在催啊。嗯,那那我应该怎么找呢?这这个我们需要拐个弯啊,需要你看看能拐过来这个弯不能。我们要有船员的时间,我要找这个时间之前的。呃,要找这个时间之前的,大家想一下啊。实际上呃,我我假设啊,假设现在index啊啊,这是一个index。这是一个一个啊,这是一个是吧,假设这个是T。这个文件名叫T啊,TT10。
05:02
这个文件名啊,假设啊叫T。这个。呃,20。假设啊,它不一定平均啊,就叫比如T30啊。T。那大来想一想啊,我这个里边存放的这些消息肯定是T10之后的。对吧,所以你现在要传传上的时间啊呃,要的你要你要查这个时间,要查这个时间之前的,所以你首先要先看文件名,我先看看啊,我我这个常用的时间。如果比这个大,哎,那就对了。我需要,我床上的时间肯定要比他大。一看比他大,好,我再看这个,一看比他也大。呀,怎么没了?嗯,这样啊这样。
06:01
哎。就这吧,就就就这吧。还有刚才这个啊。简单的话啊啊,这不是20这30嘛,我就不写了啊啊,我这个时间比这个T20也大,然后再和他一比比T30小,OK,找到了。我要找的是文件是谁?这是T20。是T20,这是T30,大家想想我现在要找的文件是哪个?K第20。不可能是T30啊,T30,关键T30就比你这个时间要大了。所以肯定是T20。我找都是最新的啊,你注意我们找这个消息肯定都是最新的啊。然后我在这里边儿,在这里边儿紧接着。嗯,给大家写上吧,往上写一下啊。写什么?这个就是我们要找的。
07:04
人点名。是不是?指定查询时间。对的。明清文件。我们找的是最大的啊。对吧,最大的。因为我一开始就说了在这儿。那这个时间。是是指定时间说之前存储的最新消息,所以这就是为啥我不查谁刚才说那个T10里边的对吧,我要查的是啊,T20里边的,诶最新对吧。然后紧接着计算出啊传入时间呃与找到啊文件。名间的这个差值em。假设啊,我们要查找的是,呃,这个这个T。
08:01
呃,T28。对吧,我T28,那肯定就是T28,减去那个文件名T20,那DF就是几啊,就是T就是八对吧,这差值就是八啊,你记着紧接着。来计算这个K的黑值,没啥可说的啊,计算所有的槽位的序号N,这个我们刚刚说过。这不是他。是吧,超微信号。这样吧,我把它拷过来。对吧。啊,我计算这个差位序号。就这样算的,紧接着根据槽位序号计算出该lo。在index里边的位置,这个我们也刚刚说过。就这个。
09:00
是吧?写他的。我写到这儿啊。哎,这样是吧。然后。就找到这个位置啊,槽位的位置,然后找到lo后读取它的值。耳记当前料最新的index索引单元的index。嗯。就是。读谁啊,你注意。毒死。Slot的值就读这个,这肯定是最新的呀。我读这个index number,它也就是他的最新的。是吧,这是最新的这个这个消息,我就找到这个,我就找到找到这个这里边这个index,呃贝啊,这数据我就读到了,当然你ex贝里边。
10:10
啊,它里边有什么是不是,呃,有。你注意啊,这边最重要的有两样东西。最重要的两个东西,有一个他。有一个他这是对应的我们那个。Which。我只要是他,那我就直接找到这个消息了。还有一个是time加,这就是判断,用它来判断是不是这个。所以。呃,我找到了这个。Number,然后紧接着根据number计算出该在file里边的位置,我要判断的啊。有了in number了,我这找到这个,它它in单元在index file里边的位置,这这个怎么。算的不是在这儿吗?
11:04
是吧?来计算。计算这个位置是吧。找到了index它的位置了,紧接着。前面计算出的时间差DF,就我们刚才说的那个那个八那个时间啊。减去当前在单元里边的m if。减去。这里边这个time if,它。哎,他说了,如果小于零。可不是你注意啊,这里边儿其实有个问题。这边有个问题,就是我们单元大家看这个图啊,看这个图。他的前面一个是他,他的前面一个是他,我想问问大家啊。越往前。
12:00
这个time beef是越小还是越大?越往前的所有单元里边那个time beef。越小号越大。肯定是越小,为什么越往前这个时间啊。这个时间距离你这个文件创建的时间点是不是越近。有可能这是第一条,就是你刚刚创建好这个文件以后,马上就把这个。写进去了。所以随着时间的增加,越往后。他们之间这个差值是不是就越大,所以啊。呃,在这儿。嗯。你在这儿,这。啊,给大家加加一个注释吧,就是。越啊越向前。Index单元。所以单元中的。
13:02
看。怎么?越小。是不是?为什么啊,因为呃。该消息。生产的。时间。距离。文件。创建文件创建。时间。越越近越近,当然这个时间点这个差值就越越小。是吧?没法画。的话。来给他吧。
14:02
Yeah。什么意思?你看不让往这画了啊。就这吧,就这就就这吧。是吧,当然这个。给大家标一下吧。这这这虚线啊,这是一个说明。哎。好,这是,所以大家想想啊,就是你如果说当前这个时间,我要这个,我只跟这个时间啊,这个这个之前的,所以它如果小于零肯定是不行的。我得找大于等于零的,所以怎么办啊,我得读取它的什么pray index的number是吧?读取该index单元的pre index number,然后作为要查找的下一个index所单元的index number,我这又有了index number,再回到这。
15:12
In,我就又找到它的位置,然后继续在这在判断,就也就是说它相当于什么往前走了一个。再判断往前再走一个,再判断我知道我找到谁。这个差值大于等于零。差值大于等于零。诶,然后我就是吧,读取它的什么,它的这个。是吧?读他的就这个。多了啊。啊,然后就定位到我们的消息了,定位到消息我就可以消费这个消息了。对不对,这就是整个这个流程啊,这个流程还是比较复杂的,还是比较复杂的。
16:04
呃。更新一下。地图更新了。我更新到这儿啊。把这个去掉了。啊,这是最新的图,嗯。那么这就是他整个查询的流程。
我来说两句