大厂面试题-MVCC的理解

目录

第一种:读读

第二种:读写

第三种:写写


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

第一种:读读

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

第二种:读写

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

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

1、事物隔离性问题

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

第三种:写写

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

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

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

MVCC主要解决了三个问题:

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

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

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

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

相关推荐
Darling噜啦啦3 分钟前
从零搭建单词管理系统:Next.js + Supabase + Drizzle ORM 全栈实战
数据库·orm·next.js
liangbo74 分钟前
JVM规范第 4 章:class 文件格式
java·jvm
橘子汽水1684 分钟前
Leetcode 236,437:二叉树的最近公共祖先,路径总和III
java·数据结构
牛油果子哥q5 分钟前
C++模板万字深度精讲:函数/类模板特化、全特化与偏特化、SFINAE机制、类型萃取、模板元编程入门、工程实战落地
开发语言·c++·面试
数据狐(Datafox)11 分钟前
1688商品详情API技术解析与落地应用(含标准 JSON 示例)
java·数据库·json
阿黎梨梨14 分钟前
搭建一个单词管理后台:Next.js + Supabase + Drizzle
数据库·next.js
神仙别闹19 分钟前
基于C++ 实现 L 系统分形树
开发语言·c++
君顾119 分钟前
AI智能商城实战指南:从架构设计到部署落地的完整技术方案
java·开发语言·多商户
Rain的Java大神之路22 分钟前
SkyWalking从0-1部署成功实战
java·后端·架构
就叫飞六吧23 分钟前
Spring 动态注册与移除 Bean 科普
java·后端·spring