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

多版本并发控制协议(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转换成数字,这个数字更大)更新了这个数据,那么这个写操作将失败。

猜你喜欢

转载自lobin.iteye.com/blog/2327421
今日推荐