多版本并发控制

多版本并发控制(Multiversion concurrency control， MCC 或 MVCC)，是数据库管理系统常用的一种并发控制，也用于程序设计语言实现事务内存。refs . Clojure. Retrieved on 2013-09-18.

MVCC意图解决读写锁造成的多个、长时间的读操作饿死写操作问题。每个事务读到的数据项都是一个历史快照，并依赖于实现的隔离级别。写操作不覆盖已有数据项，而是创建一个新的版本，直至所在操作提交时才变为可见。快照隔离使得事务看到它启动时的数据状态。

算法
MVCC使用时间戳 (TS), 或“自动增量的事务ID”实现“事务一致性”。MVCC可以确保每个事务(T)通常不必“读等待”数据库对象(P)。这通过对象有多个版本，每个版本有创建时间戳 与废止时间戳 (WTS)做到的。

事务Ti读取对象(P)时，只有比事务Ti的时间戳早，但是时间上最接近事务Ti的对象版本可见，且该版本应该没有被废止。 

事务Ti写入对象P时，如果还有事务Tk要写入同一对象，则(Ti)必须早于(Tk)，即 (Ti) < (Tk)，才能成功。Ramakrishnan, R., & Gehrke, J. (2000). Database management systems. Osborne/McGraw-Hill.

MVCC可以实现。

历史

MVCC在1981年的一篇论文"Concurrency Control in Distributed Database Systems"被充分论述，并成为经典描述。一般认为原创工作始于1978年的博士学位论文。 
数据库实现
现在，多数数据库系统已经使用MVCC。
 Altibase
 ArangoDB
 Berkeley DB
 Cloudant
 Clustrix
 Couchbase
 CouchDB
 CUBRID
 IBM Db2 – 从 IBM DB2 9.7 LUW ("Cobra") 在 CS孤立级– currently committed modeDB2 Version 9.7 LUW Information Center, Currently committed semantics improve concurrency
 IBM Cognos TM1 – 从版本9.5.2TM1 9.5.2 Information Center, Parallel Interaction
 Drizzle
 Druid
 etcd
 EXASOL
 eXtremeDB
 FirebirdWhite paper by Roman Rokytsky Firebird and Multi Version Concurrency Control 
 FLAIM
 FoundationDB
 GE Smallworld Version Managed Data Store
 H2 Database Engine –从版本 1.0.57 (2007-08-25)
 HBase
 HSQLDB – 从版本 2.0
 IBM Netezza
 InfiniDB
 IngresMVCC - Ingres Community Wiki . Community.ingres.com. Retrieved on 2013-09-18.
 InterBase – 所有版本
 LMDB
 MariaDB (MySQL fork) – 当用于 XtraDB, InnoDB分支About XtraDB, About XtraDB  or PBXTMariaDB/Storage Engines, PBXTAbout PBXT, About PBXT 
 MarkLogic Server – 见Inside MarkLogic Server
 MemSQL
 Meronymy SPARQL Database Server
 Microsoft SQL Server –当使用 READ_COMMITTED_SNAPSHOT, 从SQL Server 2005
 MongoDB – 当使用 WiredTigerMultiversion concurrency control in MongoDB, MongoDB CTO: How our new WiredTiger storage engine will earn its stripes 存储引擎
 MySQL – 使用 InnoDB,MySQL 5.1 Reference Manual, Section 14.2.12: Implementation of Multi-Versioning MySQL 5.1 Reference Manual, Table 14.1. Storage Engine Features  Falcon,or Maria MySQL 5.1 Reference Manual, Section 14.6.1: Falcon Features (Archive)  或 Archive 存储引擎
 NuoDB
 ObjectDB
 ObjectStore
 Oracle database – 从 Oracle 4Oracle Database Concepts: Chapter 13 Data Concurrency and Consistency Multiversion Concurency Control 
 Oracle (née DEC) Rdb
 OrientDB
 PostgreSQLPostgreSQL Current Documentation, Chapter 13: Concurrency Control 更新的事务如果删除、修改了数据项并提交，则老的事务将对这些提交结果可见。
 Postgres-XL
 Rdb/ELN
 RDM EmbeddedRDM Embedded 10.1 Reference Manual, d_trrobegin 
 REAL Server
 Realm
 RethinkDB
 SAP HANA
 SAP IQ
 sones GraphDB
 Splice Machine
 Sybase SQL Anywhere
 Tibero –从 Tibero 3
 TokuMX
 Actian Vector
 Zope Object Database

参考文献

 延伸阅读 
 Gerhard Weikum, Gottfried Vossen, Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery, Morgan Kaufmann, 2002, 

Category:并发控制
Category:数据库