大厂面试题-MVCC的理解

目录

第一种:读读

第二种:读写

第三种:写写


对于MVCC的理解,可以先从数据库的三种并发场景说起:

第一种:读读

就是线程A与线程B同时在进行读操作,这种情况下不会出现任何并发问题。

第二种:读写

就是线程A与线程B在同一时刻分别进行读和写操作。

这种情况下,可能会对数据库中的数据造成以下问题:

1、事物隔离性问题

2、出现脏读,幻读,不可重复读的问题

第三种:写写

就是线程A与线程B同时进行写操作

这种情况下可能会存在数据更新丢失的问题。

而MVCC就是为了解决事务操作中并发安全性问题的无锁并发控制技术全称为Multi-Version Concurrency Control,也就是多版本并发控制。它是通过数据库记录中的隐式字段,undo日志,Read View来实现的。

MVCC主要解决了三个问题:

第一个是:通过MVCC可以解决读写并发阻塞问题从而提升数据并发处理能力

第二个是:MVCC采用了乐观锁的方式实现,降低了死锁的概率

第三个是:解决了一致性读的问题也就是事务启动时根据某个条件读取到的数据,直到事务结束时,再次执行相同条件,还是读到同一份数据,不会发生变化。而我们在使用MVCC时一般会根据业务场景来选择组合搭配乐观锁或悲观锁。

这两个组合中,MVCC用来解决读写冲突,乐观锁或者悲观锁解决写写冲突从而最大程度的提高数据库并发性能。

相关推荐
2601_949809591 分钟前
flutter_for_openharmony家庭相册app实战+我的Tab实现
java·javascript·flutter
猷咪23 分钟前
C++基础
开发语言·c++
IT·小灰灰24 分钟前
30行PHP,利用硅基流动API,网页客服瞬间上线
开发语言·人工智能·aigc·php
快点好好学习吧26 分钟前
phpize 依赖 php-config 获取 PHP 信息的庖丁解牛
android·开发语言·php
秦老师Q27 分钟前
php入门教程(超详细,一篇就够了!!!)
开发语言·mysql·php·db
烟锁池塘柳027 分钟前
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题
开发语言
是誰萆微了承諾27 分钟前
php 对接deepseek
android·开发语言·php
vx_BS8133031 分钟前
【直接可用源码免费送】计算机毕业设计精选项目03574基于Python的网上商城管理系统设计与实现:Java/PHP/Python/C#小程序、单片机、成品+文档源码支持定制
java·python·课程设计
2601_9498683631 分钟前
Flutter for OpenHarmony 电子合同签署App实战 - 已签合同实现
java·开发语言·flutter
打工的小王36 分钟前
redis(四)搭建哨兵模式:一主二从三哨兵
数据库·redis·缓存