00:01
好,那这个写流程说完了啊,说完以后我们再来说一下这个读流程啊,呃,其实这个读和写很像啊,读和写很像,呃,那么说到这个读的话呢啊,我们也是基于这个ID的读啊,就是我们先说这个基于ID的读啊,基于ID的写啊。想那想想啊,那你既然有ID了,那这个这个事就很好办啊,因为我们刚刚明白了,他在写的时候呢,他为什么根据你的ID呢,去做一个什么,做一个这个对对应的什么,下的时候做一个取操作,比如说我取出来是零啊,或者一啊,或者是二啊。对吧,那我就明白了啊,你的这个数据呢,写到了哪个上面,那你说你在存的时候,你这么去做过算,那我在读的时候,我同样拿上你的ID对不对,对你的什么对你的这个杀的数啊,作为一个取域操作,我就可以算出来我的这个数据呢,是在零号区,一号区还是二号区还是等等。剩下的吧,啊说说啊,它是什么可以什么直接算出来在什么地方啊,那就很简单了。对吧,行,那么对于这个读的话呢,大家需要明白的一个点就是它既可以从这个主分片读,当然了也可以从你的副本分片去读,数据就说白了,你不管是主分片还是副本分片,你都可以什么负责这个读的一个请求了,但写的话呢,只有什么主是可以负责写的。
01:13
好吧,这要知道啊,那么它整体的流程同样同样是这样子的,我们有一个客户端的发送一个请求,那谁去接收这个请求呢。假如说是NOTE1,那这个时候NOTE1呢,它还是一个协调节点,就谁接收这个客户端的请求啊,谁就作为一个协调节点。明白吧,然后接下来呢,节点就会什么使用这个文档的ID来确定你到底属于哪个分片,怎么确定的呢?就是拿上你文档的ID,对什么对我的这个的输出取操作,取出来是几,那你就什么在哪个分面上。假设啊,假设它是属于分片零的,那这个时候我一看,诶,它有它有它也有。对吧,就你的这个节点中有这个分辨,这个节点也有这个分辨,这个节点也有这个分辨。那我们说过,你们既可以从主分面读,也可以从副本分面读,那这个时候你说我真正的读请求到底是打给他,还是打给他,还是打给他。
02:07
对吧,诶这个就比较考验他了啊,说你这个谁找这点啊,你你你觉得你打给谁合适呢。对吧,这个协调件,这个协调件就说了啊,那我也不知道打给谁合适呀。对吧,那我们就这样吧,我们通过一个算法来计算吧。对不对啊,通过一个算法来去计算一下什么算法呢,就是这个。轮旋的算法。想要这个轮的算法呢,啊,就是它会去维护一个,你可以简单理解为维护一个值啊,维护一个值。能明白吧,这个值呢,为什么一直做什么做这个自增操作,比如说我原来是零好,那我什么,那我就什么打概大概这个,比如说打概这个。NOTE1可以吧,然后变成一了,变成一的话,我就打给什么,NOTE2变成二了,我就什么打给这个NOTE3变成三了,对吧?那我再打给NOTE1变成四了,那我再打给NOTE2变成五了,那我再打给NOTE3。对吧,就通过一个值,我觉得什么可以去做到这个轮旋的一个效果。
03:01
能明白吧,好,这样的话大家注意啊,他就会什么通过轮询的方式将请求呢,诶打到这个不同的节点上来,达到负载均衡。明白吧,因为你想想啊,既然你们都可以负责读,那你说我总不能说每次读的时候我都打给你,打给你不好啊,或者打给他是不是也不好啊,或者都打给他是不是也不好啊。对吧,那我就希望你们三个人呢,诶可以什么呀,相对比较均衡的啊,去负担所有的这个写,呃,所有这个什么毒请求。那怎么去均衡的负担呢?那我们就是采用轮选的方式,就一人轮一个,一人轮一个,对吧?轮到你你来读,轮到你你来读,轮到你你来读,这就完事了。OK吧,它内部是采用这个轮选的方式的啊,这个要记录一下好行,那假如说本次呢,它轮到了这个NOTE2了啊,那就那那就干嘛呀,我就把这个读请求呢,是不是要发给这个NOTE2了呀。那么发给他以后呢,他会把这个数据呢给我检索出来,检索出来以后呢,他会把数据呢返回给你的协调节点,对吧?因为他是一个协调节点啊,这个时候呢,我的协调节点呢,再把数据呢返回给我的客户端啊就可以了。
04:01
理解吧,这是一个读流程啊,也是基于ID的,但凡你是基于ID的,那就很好办,因为我是可以什么通过你的ID计算出来你到底是属于哪个分票的,我就什么直接打给这个具体的分票,然后做这个相应的操作就完事了。好吧,说这个读呢,也是非常简单的啊好,这里面的两个关键点,就是第一个点就是主和副呢,都可以负责读的操作,再一个关键点就是什么呀,那我将来打给哪一个分票。对吧,就是要通过什么ID来做计算,那我算出来这个分片号以后呢,我是打给这个主分片还是打给副本,副本分片到底是哪一个,这个它怎么去决定呢?他为什么通过轮询的方式来决定。啊,这是我们这个读里面大家需要关注的几个重点啊,几个关键点吧。好吧,啊,这也比较简单啊,我就不多说了啊,行,这是我们基于ID的一个读啊。
我来说两句