00:00
上课呢,我们就来演示一下这个MGRR组复制,其实它这种同步方案也是有延迟的。那么呢,这里呢,其实啊,你可以给它理解为是一种虚拟的全同步复制这种方案,其实呢。嗯,其实跟那个主动复制也差不多,其实你也可以给它看成是那种异步复制。啊,其实这点他其实做了一些改良,到时候我们来做一下实验,你就明白了。啊,这个MGR也是有这个有延迟的啊,你先这么记。然后这里呢,我是把它这个原理啊,这个复制的原理呢,我大概给写在这个PDF里了啊,它呢,先比如说现在我这个主节点啊,它有一条数据啊,比如说插入一条数据一,它首先先来检测这个主节点。啊,是否有冲突。如果没有冲突呢,然后呢,他把这个写入集,哎,复制到这个从节点一上,也同样的去插入这条一看是否有冲突啊,然后呢,114的是从节点二。
01:06
啊,做同样的检测,如果都没有问题了,那么主节点呢,它它会返回插入成功,如果有其中有一个节点。逐渐冲冲突了,那这个时候呢,它就会逐渐直接就回滚了啊,这个就大概是MGRR组复制整个的一个原理的啊,这是放入到这个一个写入集里的,那什么叫这个写入集呢。我这里呢。呃,给大家先画了一个图,然后呢,我们来依次去看啊,你就先记好了,写入集就是在主库中串行提交的事物,只要事物之间相互不冲突,那么呢,就归入一个系手机里的。啊,我们先理解这个写入题呢,我们先理解一下这个,呃,买这个5.t那个主提交是什么概念,那比如说现在呢,我这有一张图啊,比如说我现在啊。
02:02
这个N啊,我现在鼠标画这个,比如说现在是十点。啊,后面比如说是10.01秒,10.02秒,10.03秒,10.04秒,那么呢,在这个期间里呢,它产生了产生了几条事物。啊,然后呢,他们按照这个时间,比如说这实验中现在有两条事务提交了,他们之间没有任何的冲突,那么呢,我们先执行这个事务,T1和T2,然后接下来依次的按照时间顺序啊执行T3啊T4和T5T6。啊,最后再执行这个T78,这个主提交是按照这个时间顺序的,那什么叫这个写入集呢。如果啊,这几个事物啊,它相互之间逐渐没冲突。啊。然后呢?这个MGRR呢,就干脆啊,就把它列入一个写入集,我们来看这张图啊,这是一个大括号。
03:02
啊,然后呢,把它放入一到一个吸入机里头。然后呢,通过这个。这个参数啊。它默认是2000,呃,两两万五千个事物啊,合并这个2000。啊,25000个事物归归入一个洗手级,然后把这个洗手级。去做这个并行复制啊,其实这个就叫写入集。你看跟这两个区别啊。啊。检测更新了相同的记录来判断是否能并行回放。哎。这个就叫这个写入集,这MGRR就是采用了这这种并行复制的这种模式。刚才我们说了,因为MGR啊,这个组复制它并不是全同步的方案,其实它也是有延迟的。所以说呢,这里呢买呢在八点呃,0.14这个版本啊,加入了一个读写一致性这个特性,就通过这个参数来控制的。
04:05
然后具体的这个参数呢,取值呢,我们来到时候通过演示呢,给大家演示一下啊,我们先记好了啊,现在是这个图啊,我们现在给大家演示一下啊。那我现在呢,现在有三台机器啊,你看我这个3S723123啊,现在是。一个组复制,那这个节点。是主节点啊。啊,就在这台机器上,我们来看一眼啊。现在呢,有一条记录对吧。啊,我们来分别到二。三节点上看啊,这实验数据都一样的是吧,然后呢,我们现在模拟一下啊,我现在在这个T3节点上。我执行医院全局所。哎,我执行一下全局图锁,我先给它锁住,然后我们到回到这个主题审上。
05:04
我们插入一条二了。回车。那这个时候呢,数据已经插入成功了,我们来看一眼啊,你看。现在。一二主节点啊,然后我们到第二个从节点上。数据已经过来了是吧。因为刚才现在到这个第三个节点,因为我们刚才锁住了,所以说现在的数据你看没看它是。读的数据是脏数据。没问题是吧,我们再开一个窗口啊。对吧,现在读的是脏呃脏数据,然后呢,我们在现在再回过头再看这个图啊。你看。默认这个参数啊,就是这么个意思,就是说事物T事物T2执行select前不会等到先行事务T1的。
06:03
这个回放完成,所以说我们现在看到的数据是脏数据,那怎么能去避免呢?我们读到数据是脏数据呢?你可以啊,通过这个参数。就把它设成为一笔付。啊,我们。再来看一眼啊。哎,我们设置完以后,然后你再执行啊。你会发现看见没有,直接就。相当于就给夯住了。是吧,我们可以开个窗口啊。我们执行那个list来看一眼啊。你看看见没有。给锁住了,对吧,Hang住了,你看hang住了。啊,就是因为我们刚才设入了。设的这个参数设置设置为比before了,那比before的参数呢,我我这里图呢也给大家画好了,现在到你看这个从节点三是吧,事物T2执行select前会等待刚才我们事物T1的回放完成,这时候呢,如果这个T1。
07:15
不能完成。那么此时。这个T2会一直就会出现横路,就刚才我们现在看到这种情况。就不往下走了,一直会那个卡的卡,呃,卡在这儿了。啊,这个就设置为这个before是这么个意思。所以说呢,这里呢。这MTR呢,其实是有那个延迟的,那怎么来判断我这个现在这个事物到底是延迟多少个呢?就比如说因为我们我们主动布置啊。嗯,可以执行那个收slave state对吧,那怎么这MGR怎么判断呢,你就执行这句。首先我现在给你写好这条circle口。你可以在。其他节点上你执行一下,比如现在我在主节点啊,你执行一下。
08:05
啊,我看一眼啊,我哦,这。这里有一个空格啊。我们来看这个。我先把这改一下。这有一空格。呃。我再再再插入一条吧,这样看的。我现在差三啊。哎呀,现在我这个还是被一直没有看,还还不懂呢,我们来看这个啊。啊,你就看这个,你看没,现在他已经有两个了吧,队列有两个了吧,说明现在。
09:01
这个节点现在延迟的有两个15了,我们再插入一条啊。比如说四啊。然后呢,哎,你在执行这个。你看没有,它就又多了一个对吧,再执行五。嗯,看到没有,这个数字会不停的变化,那可以现在可以看见了啊,现在是这个节点,第三个节点,现在出现有延迟了,因为这已经是四个了。啊,你可以到其他的从库也执行一下,效果是一样的。这改一下。嗯,对吧,是吧,其实。MTR,其实它是也有那个。呃,有延迟的,然后这里呢,它为了避免啊,它它这有一个流控机制,他为了避免这个延迟太大,它这其实是有一个限流的。
10:09
啊,就这么一个功能,它默认呢,它是限流是也是两万五个。就这个参数啊。默认的页子。超过这个两万五事物,它就会触发这个限流,你发现没有这个两个参数,这两万五跟刚才我们。这个参数这个写数集这个是不是一样的,你看写数集这个参数默认是两万五个事物对吧。这里呢也是两万五啊,所以说你就通过这两个这几个这几个参数你就明白了,这个MGRR呢,其实它跟这个主从复制是一样的,它不是那个真正的全同步复制机制,它只是一个虚拟的。那个全同步,其实你也可以理解为,其实他也跟异步差不多。
11:04
也是有延迟的。啊,今天呢,我们我们就把这个MTR这个有延迟,这个给大家演示一下,然后这篇文档呢,大家到时候会好好看一遍。呃,具体呢,我就写到到这个文字里了,我就不再给大家叙述了。那好,那今天呢,这堂课呢,我就演示到这儿了。
我来说两句