【每日一题】8.31 说下你了解的MVCC机制?

MVCC是一种数据库并发控制机制,通过存储数据的多个版本来提高并发性,尤其在读多写少场景中解决了读写锁导致的读延时问题。它解决了读提交和可重复读的隔离级别问题,使得事务在不加锁的情况下也能处理常见的并发行为。
摘要由CSDN通过智能技术生成

一、什么是MVCC?

MVCC(Multi-Version Concurrency Control)是一种数据库并发控制机制,用于处理多个事务同时访问数据库时可能出现的并发冲突问题。

通过名称关键字: 多版本, 并发控制去理解。

多版本:单版本就是一个数据,在变更(新增,修改,删除)都是最新状态,没有历史记录,而最新状态下,要维护数据并发下的安全性,则要通过并发处理(通常加锁)保证,而多版本就是数据存在多个版本,多个事务在读取修改时,存在多个版本,可能读取旧的版本,也可能读取最新版本(具体情况根据隔离级别等判断)

并发控制:如果不是并发情况下,就不需要控制了,要先知道并发所带来的问题后再去对比方案的不同。

二、MVCC解决了什么问题?

1.首先分析场景都是以行数据为例,MVCC在行数据上极大提高了并发性):

数据库并发有 读-读 , 读-写(写-读),写-写 等场景
常见解决方案就是,读写锁,这样能满足读读共享读写互斥写写互斥

初步看是没有问题的,但实际存在一个极大的问题,大多数互联网公司都是读多写少

假设例子:某商城APP首页公告,每天首页打开上千万次或者上亿次,如果修改商城公告时,所有的读操作受阻,是不是所有人都会存在一个读延时的情况,体验极差,解决体验的方式通常是能读取最新的就给最新的,不能读取最新的时候,就给旧数据,最大的需求就是不要用户阻塞。

这里例子纯从理解读写锁性能场景角度出发,非实际并发应用案例,无隔离,缓存,读写分离等等不需考虑

MVCC就是极大的解决了这个问题(读写并发),通过不加锁的情况下,去满足一些常见的读写并发行为,为事务提高并发性,此时的读操作称之为快照读,可能读取的非最新数据。

至于写写操作,如果不担心写丢失问题可以不用管,否则还是需要通过加锁解决。

2.从隔离级别来说

Mysql存在四种隔离级别,读未提交读提交可重复读序列化四个隔离级别

  • 读未提交 这种就是无并发控制,直接读最新数据就可以

  • 读提交 存在并发控制和读写情况,则可以通过MVCC解决

  • 可重复读 存在并发控制和读写情况,则可以通过MVCC解决

  • 串行化 已经将事务串行执行,并发已经被解决彻底了

也就是MVCC解决了读提交和可重复读的隔离性问题。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值