多版本并发控制

多版本并发控制(Multiversion concurrency control, MCCMVCC),是数据库管理系统常用的一种并发控制,也用于程序设计语言实现事务内存。

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

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

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

事务Ti写入对象P时,如果还有事务Tk要写入同一对象,则(Ti)必须早于(Tk),即 (Ti) k**),才能成功。

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 mode
  • IBM Cognos TM1 – 从版本9.5.2
  • Drizzle
  • Druid
  • etcd
  • EXASOL
  • eXtremeDB
  • Firebird
  • FLAIM
  • FoundationDB
  • GE Smallworld Version Managed Data Store
  • H2 Database Engine –从版本 1.0.57 (2007-08-25)
  • HBase
  • HSQLDB – 从版本 2.0
  • IBM Netezza
  • InfiniDB
  • Ingres
  • InterBase – 所有版本
  • LMDB
  • MariaDB (MySQL fork) – 当用于 XtraDB, InnoDB分支 or [https://web.archive.org/web/20120704051041/http://kb.askmonty.org/en/about-pbxt/ PBXT]
  • MarkLogic Server – 见
  • MemSQL
  • Meronymy SPARQL Database Server
  • Microsoft SQL Server –当使用 READ_COMMITTED_SNAPSHOT, 从SQL Server 2005
  • MongoDB – 当使用 WiredTiger存储引擎
  • MySQL – 使用 InnoDB, Falcon, 或 Archive 存储引擎
  • NuoDB
  • ObjectDB
  • ObjectStore
  • Oracle database – 从 Oracle 4
  • Oracle (née DEC) Rdb
  • OrientDB
  • PostgreSQL更新的事务如果删除、修改了数据项并提交,则老的事务将对这些提交结果可见。
  • Postgres-XL
  • Rdb/ELN
  • RDM Embedded
  • 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,

评论 (0)

  • 还没有评论,来抢沙发吧。