多版本并发控制协议(Multiversion concurrency control) 简介

MVCC是一种用于数据库并发控制的技术,避免锁竞争,允许多个事务同时访问同一数据而不会产生不一致。它通过保留多个数据版本,确保读操作总能看到一致性视图。写操作创建新版本而不是覆盖旧版本,而读操作则访问其开始时的数据状态。MVCC利用时间戳和事务ID来确保一致性,并需要定期清理过期数据。
摘要由CSDN通过智能技术生成

多版本并发控制协议(Multiversion concurrency control)是一种并发控制实现,通常用于数据库以提供并发访问,以及在编程中实现事务型内存访问。

 

在并发领域,如果一个操作正在从数据库中读数据,同时另一个操作正在往数据库更新这个数据,那么读操作可能读到写了一半的数据或者不一致的数据。

 

有很多被称之为并发控制的方法来解决这个问题,最简单的方式就是采用锁的方式,所有的读操作都等待写操作完成之后才能进行读取。但这种方式很慢。

 

多版本并发控制采用的不同的方法,每个连接到数据库的用户在一个特定的时间内只能看到一个副本。在写操作修改完成时(在数据库中,事务被提交),写操作的任何修改不会被其他连接的用户看到。

 

当需要更新一个数据项,它不会用新数据覆盖旧的数据,而是标志旧的数据为已过时、再添加一个新版本。这个时候存在着多个版本,但只有一个是最新的。它允许读操作可以访问他们开始阅读时的数据,即使它被其他操作(写操作)部分地修改或删除。它也可以避免填充在内存或磁盘结构上的漏洞的开销但要求(一般是要的)系统定期扫描和删除旧的,过时的数据对象。

 

多版本并发控制提供一种用于时间一致性的检查点(check-point)视图。

 

版本并发控制使用时间戳(TS)和自增的事务ID来实现事务的一致性。通过维护多个版本的数据,多版本并发控制保证一个事务(T)在读取数据(P)时不必等待。每个版本的数据P包括一个读时间戳(RTS)和一个写时间戳(WTS),使得一个特定的事务Ti读取最新版本的数据,也就是在这个事务读之前的版本-读时间戳RTS(Ti)

 

 

如果事务Ti想要写数据P,并且同时有其他事务Tk在写这个数据,要使得这个写操作(WTS)成功,读时间戳RTS(Ti) 必须是RTS(Tk)之前的那个时间戳,例如,RTS(Ti) < RTS(Tk)。如果有其他事务(更加新的一个读时间戳RTS转换成数字,这个数字更大)更新了这个数据,那么这个写操作将失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值