当前位置:  开发笔记 > 后端 > 正文

数据库:什么是多版本并发控制(MVCC)以及谁支持它?

如何解决《数据库:什么是多版本并发控制(MVCC)以及谁支持它?》经验,为你挑选了3个好方法。

最近杰夫发布了关于他阅读相关数据库死锁的问题. 多版本并发控制(MVCC)声称可以解决这个问题.它是什么,以及哪些数据库支持它?

更新:这些支持它(其他人?)

神谕

PostgreSQL的

Krantz.. 36

Oracle已经有很好的多版本控制系统,因为很长时间(至少从oracle 8.0开始)

以下应该有所帮助

    用户A启动一个事务,并在时间T1更新1000行,并带有一些值

    用户B在时间T2读取相同的1000行.

    用户A更新行543,其值为Y(原始值X)

    用户B到达行543并且发现自时间T1以来事务处于操作中.

    数据库从日志中返回未修改的记录.返回值是在小于或等于T2时提交的值.

    如果无法从重做日志中检索记录,则表示数据库未正确设置.需要为日志分配更多空间.

    这样就实现了阅读的一致性.返回的结果总是与事务的开始时间相同.因此,在事务中,实现了读取一致性.

我试图用最简单的术语来解释......在数据库中有很多多版本.



1> Krantz..:

Oracle已经有很好的多版本控制系统,因为很长时间(至少从oracle 8.0开始)

以下应该有所帮助

    用户A启动一个事务,并在时间T1更新1000行,并带有一些值

    用户B在时间T2读取相同的1000行.

    用户A更新行543,其值为Y(原始值X)

    用户B到达行543并且发现自时间T1以来事务处于操作中.

    数据库从日志中返回未修改的记录.返回值是在小于或等于T2时提交的值.

    如果无法从重做日志中检索记录,则表示数据库未正确设置.需要为日志分配更多空间.

    这样就实现了阅读的一致性.返回的结果总是与事务的开始时间相同.因此,在事务中,实现了读取一致性.

我试图用最简单的术语来解释......在数据库中有很多多版本.



2> thelsdj..:

PostgreSQL的多版本并发控制

除了本文为特色的MVCC发出INSERT,UPDATE时,和DELETE语句的工作原理图.



3> 小智..:

以下是MVCC的实现:

SQL Server 2005(非默认值SET READ_COMMITTED_SNAPSHOT ON)

http://msdn.microsoft.com/en-us/library/ms345124.aspx

Oracle(自版本8以来)

MySQL 5(仅限InnoDB表)

PostgreSQL的

火鸟

Informix的

我很确定Sybase和IBM DB2 Mainframe/LUW没有MVCC的实现

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有