00:01
下面呢,咱们继续来学习read中的事物操作,刚才呢给大家说明了read中事物它该怎么进行操作,包括咱们演示的事物的这行过程,那下面呢,咱们来解决这么一个问题,就是关于事物的冲突问题,那这个问题怎么解决呢?我们来看一下啊,我这里边呢给大家举个例子,咱们通过这个例子来说明这个问题,包括说明它的解决方案是怎么样的,那例子是什么呢?比如说我们举这个例子啊,因为各位同学应该都在网上买过东西。假如说现在啊,有这么一个场景,比如说你的这个账户,也有很多人都知道你这个账户,比如说你的这个现在的女友,你的前女友,包括你自己这个三个人肯定都知道你的账户,就这个三个人呢,目前都想去在双11这一天去买东西,那这个过程中就会产生这一问题,那什么问题呢?大家看这例子啊。
01:00
比如现在啊,你们三个人中,其中一个人想要去买一个8000块钱的东西,然后第二个人呢,想买个5000块钱东西,第三个人比如是你自己想买个1000块钱东西,那比如说你一共有1万块钱,那这个过程中呢,就会产生一个问题,因为三个人都有你的这个账户,而你最终只有1万块钱,那三个人想买不同金额的商品,这过程中就会产生事物的冲突问题,这是我们要举这个例子,然后这个例子是怎么样的呢?下面给个未来说一下啊,咱们通过PPT给个未来放映出来,因为这么看更加明确,就刚才我提的需求,三个人都已的账户,你一共有1万块钱,那这个时候呢,比如一个人想要去买8000,一个人想买5000,一个人想买1000,那你账户随着这个买的金额是不是要减不同的值啊,那咱们看这过程会有什么问题啊,跟我一起咱们来看一下。首先1万块钱,比如说我们的第一个人,他想要买8000块钱,就是你的1万肯定大于8000,那他肯定可以买,然后第二个人呢,想买这个5000,就是里边要减5000,第三个人买1000,那1万块钱中是不是要减1000,三个人都去做多操作,比如现在三个人打开账户看到1万块钱,一个人买8000,第二个买5000,第三个买1000,那大家可以想一下,这过程中会产生什么问题吗?
02:29
会有什么问题,大家跟我一起来想一下,有什么问题,那我们来往下看啊,比如说第一个人啊,他买完了8000块钱,这个东西只有你账户中是不是要减8000呀,减完8000之后,账户中变成多少,是不是变成了2000呀?而这个时候呢,第二个人他也想买东西,比如第二个人呢,他最开始看账户中是不是有1万块钱呀,那他在买的时候肯定就不需要再看账户,那这个时候呢,他在里边就买了5000块钱商品,因为第一个人已经买了8000,账户中目前剩下2000,他在买了5000,账户中是不是就剩下了负3000这么一个值啊,啊,当然咱们只是模拟场景啊,实际中你如果说有负值肯定买不了,但是模拟过程,那现在账户中剩下负3000,那这个时候呢,第三个人他想买1000的商品,最终账户中变成是不是就是负4000这个值啊,比如现在你买了商品之后,你发现诶,我的账户怎么变成了负4000,所这个过程中它里边就产生一个问题,问题是什么?因为咱没有加事故,所以它产生了一个冲突的问题,这是给各位演示这个过程。
03:40
那这过程给大家啊,我可以再演示一遍啊,比如现在我们我一共有1万块钱,三个人都来操作,我这个1万块钱,第一个人他要买8000块钱商品,就是减8000,第二个人减5000,第三个人减1000,比如第一个人他先买的商品,因为他手比较快,先买了商品,那他买完之后,我账户中是不是只剩下2000呀,第二个人呢,他里边因为第一次他看我有1万块钱,那他买5000,但是第二次他发现啊,这里边我买完之后,我这是变成了负3000,因为他是通过2000减的5000,然后第三个人呢,通过3000再去减1000,最终变成是不是就是负4000这个值啊,所以这个过程就叫做事物的冲突问题,因为你多个人之间并没有加事物,他们互相产生了影响,而且最终的值就变成了负4000。
04:36
这是咱们说明的这么一个问题,就叫做事物的冲突问题,那这个问题呢,我们目前出现了,咱就要想一下它的解决方案,就这问题我们该怎么进行解决,那大家可以想一下这些问题咱们该怎么解决呢?或者说该怎么处理这个问题,如果遇到咱该怎么去做。那大家想一下啊,我这里说明,在我们这个re中,针对上述事务冲突问题有两种解决的这个方式,具体说是用锁的机制进行解决,就给它上锁可以解决,而这锁呢,在里边分成两种锁,一个锁叫悲观锁,一个叫乐观锁,用这两种方式能解决这种问题,那两种所分别都是什么意思,给各位详细解释一下,我们先看第一个叫悲观锁。
05:27
那什么叫闭关锁呢?大家看过程啊,比如现在我有1万块钱,然后有多个人都想去操作1万块钱,那比如说我第一个人操作的时候,1万块钱,我首先做件事情,什么事情给我这个钱先上锁,上锁之后一个特点,那别人就不能操作了,只有说把锁打开之后,别人才能操作,只能看着我进行操作,所以这是第一个啊,就是我给他上锁,别人就不能操作了,那我上锁之后,比如现在我把它减了8000,最终它里边剩下是不是2000呀?
06:01
但你注意啊,我在操作的时候,其他人肯定不能操作,里面就是一个block阻塞状态,那我这个时候呢,把它减了8000,最终变成是不是2000呀,变成2000之后,你看我做了什么,把它是不是就解锁或者释放锁,而他也解锁之后,那别人是不是能得到这2000,然后他拿着2000再去操作,比如这个人他想去做操作,那他拿着2000,把2000首千他要上锁,上锁之后比如他减5000,发现2000是不能减5000,因为钱不够嘛,所以最终肯定是不能操作,如果有第三个人,同样在这个人释放锁之后,第三个人他也是进行操作,先上锁,然后操作,操作之后再解锁。所以里边这个过程叫做悲关锁,就是每次操作之前先上锁,上锁之后别人就不能操作,等我解锁之后,别人才可以继续进行操作,这种方式就叫作杯关锁方式,而用杯关锁呢,肯定是可以解决我们的问题的,这个是我们说的第一个方案,而这个方案咱看一下我这里描述啊,悲关锁顾名思义就是很悲观的嘛,你在操作的时候,别人都不能操作,只能等你操作之后才可以进行,而这种锁机制其实在传统的。
07:19
关形数据库中经常用到,比如说这个行锁、表锁、读写锁等等,里边都是这个操作,就你操作之前先上锁。然后别人不能再停操作,这种方式叫被关锁,但是大家也看到了,这种方式的缺点是什么。效率是不很低呀,比如我现在啊,有很多人都操作记录,那只能是一个一个人进行操作,所以他不能同时进行,多人同时进行,所以这是第一种方式叫悲观所的解决方案,这各位给他知道,然后除了悲观所,顾名思义嘛,有悲观就有什么,是不是有乐观,有所以咱家看一下这个乐观所是怎么做到的,我们看到啊,其实乐观所的方案是什么呢?我们在数据操作的时候呢,给数据加上一个字段,叫做什么version,就是版本号,就表示我数据的版本,比如说我的1万第一次版本号,假如说是1.0,那我操作的时候呢,注意啊,这个时候呢,就是你所有人都能得到我这个版本的数据,他的版本都是1.0,比如说我第一个人得到1.0的数据,第二人得到1.0的数据,他们都是1万。
08:30
那这个时候呢,重点是下面,比如我现在啊,第一个人他手比较快,他减了这个8000块钱,最终我数据库中是变成2000呀,而变成2000是不是就要改数据库中内容了,在改的时候呢,它会自我操作,谁先修改,除了改你值之外,把这个版本号要同步进更新,比如之前是1.0,当我变成了两天之后,版本号变成了1.1,就是版本号要同步进更新,而这个时候呢,比如说第二个人他在进行操作,里边会做件事情,什么事情。
09:06
注意这个描述啊,就是检查一下我当前的数据的版本号跟数据库中的版本号是否一致,因为第一次的时候版本号数据库中是不已经改成了1.1啊,而我第二次这个人得到还是之前1.0版本的数据,那两个版本号一比较,发现1.0跟1.1是不是就不一样了,如果它不一样的话,那怎么做?它里边就不能再净操作,因为版本号是不一致的,所以这种方式就叫做乐观锁方式,通过版本号来进行操作,如果版本号不一致,那后面就不能操作了。啊,这是我们说的乐观所给,大家我再解释一遍啊。首先第关锁嘛,就是你每次操作都给他上锁,别人不能操作,等我释放锁之后,别人才可以进行。而乐观锁怎么做呢?在数据上加上一个数据的版本号,比如说我们是1.0,而所有人都可以得到你的1.0数据,但是我在操作的时候,比如说谁第一次操作,他要除了更新数据之外,把版本号要同步进更新,变成1.1,而我下一步点操作,他在改数据之前做过比较。
10:22
判断一下我当前操作数据的版本号跟数据库中的版本号是否一致,因为按照我这过程,数据库中是变成1.1了,我当前是不是还是1.0了,两个版本号是不一样了,如果不一样的话,那就让它不能再进行操作,就会员操作就不能进行了,因为版本号目前已经不一致了,你只有说先得到这个2000之后才能操作,如果你直接都操作1万,他不能操作,比如说我第一个人操作之后,里边得到2000之后才能进行修改,如果说你这里边不得到,他只能去查看,这种方式就叫做乐观锁方式。所以这个就是我们解决事物冲突的解决方案,一个叫乐观所,一个叫闭关所,给各位做个说明,所以要求各位要知道第一个事物冲突什么问题,包括乐观所是怎么解决的,以及悲观所怎么解决的,然后乐观所这句话给各位来读一遍啊,大家来看一下啊,这里写到乐观所嘛,顾名思义很乐观的,就是每次去拿数据的时候,都认为别人不会修改,所以他不会上锁,也就是说所有人都能拿到数据,但是在更新的时候会做个判断,判断你的版本号是否一致。乐观锁是用什么?就是你的多读的这种应用类型。
11:39
这样的话可以提高你的吞吐量,比如多人同时操作,然后最终只有一个人借款成功,这就是乐观锁的特点,所以大家把这个知道啊,而乐观所大家也可以想象啊,在我们现实中其实有很多乐观所的场景,其中有一个很典型的场景,各位同学应该都知道,就是这个抢票这个过程。
12:03
抢票呢,就是一个典型的乐管所这么一个场景,那给大家举个例子啊,比如我现在啊,在我这个系统中呢,只有一张票,你注意我一张票,比如说现在我是不是可以有同时有很多人都去抢这一张票,比如目前我有100个人或者1000个人,或者1万个人都去抢这张票,当然各位注意啊,最终比如说1万个人可能都抢到,然后最终在提交,就是支付的时候,是不是只能有一个人支付成功,其他人肯定都会支付失败,就最终你在改的时候只有一个人成功,但是我现在所有人都能去抢这张票,最终你在支付的时候只能一个人成功,这就是我们说的乐观所它这个场景。所以咱们现在就把事物的冲突问题给各位做了一个说明,大家把这个给他要知道。
我来说两句