热门问题
时间线
聊天
视角
多版本並行控制
来自维基百科,自由的百科全书
Remove ads
多版本並行控制(Multiversion concurrency control, MCC 或 MVCC),是資料庫管理系統常用的一種並行控制,也用於程式設計語言實現事務主記憶體。[1]
MVCC意圖解決讀寫鎖造成的多個、長時間的讀操作餓死寫操作問題。每個事務讀到的資料項都是一個歷史快照,並依賴於實現的隔離級別。寫操作不覆蓋已有資料項,而是建立一個新的版本,直至所在操作提交時才變為可見。快照隔離使得事務看到它啟動時的資料狀態。
演算法
MVCC使用時間戳 (TS), 或「自動增量的事務ID」實現「事務一致性」。MVCC可以確保每個事務(T)通常不必「讀等待」資料庫對象(P)。這通過對象有多個版本,每個版本有建立時間戳 與廢止時間戳 (WTS)做到的。
事務Ti讀取對象(P)時,只有比事務Ti的時間戳早,但是時間上最接近事務Ti的對象版本可見,且該版本應該沒有被廢止。
事務Ti寫入對象P時,如果還有事務Tk要寫入同一對象,則(Ti)必須早於(Tk),即 (Ti) < (Tk),才能成功。[2]
MVCC可以無鎖實現。
歷史
MVCC在1981年的一篇論文"Concurrency Control in Distributed Database Systems"[3]被充分論述,並成為經典描述。一般認為原創工作始於1978年David P. Reed的博士學位論文[4]。
資料庫實現
現在,多數資料庫系統已經使用MVCC。
- Altibase
 - ArangoDB[5]
 - Berkeley DB[6]
 - Cloudant
 - Clustrix[7]
 - Couchbase
 - CouchDB
 - CUBRID[8]
 - IBM Db2 – 從 IBM DB2 9.7 LUW ("Cobra") 在 CS孤立級– currently committed mode[9]
 - IBM Cognos TM1 – 從版本9.5.2[10]
 - Drizzle
 - Druid
 - etcd[11]
 - EXASOL
 - eXtremeDB[12]
 - Firebird[13]
 - FLAIM
 - FoundationDB
 - GE Smallworld Version Managed Data Store
 - H2 Database Engine –從版本 1.0.57 (2007-08-25)[14]
 - HBase
 - HSQLDB – 從版本 2.0
 - IBM Netezza
 - InfiniDB
 - Ingres[15]
 - InterBase – 所有版本[16]
 - LMDB
 - MariaDB (MySQL fork) – 當用於 XtraDB, InnoDB分支[17] or PBXT[18][19]
 - MarkLogic Server – 見[20]
 - MemSQL
 - Meronymy SPARQL Database Server
 - Microsoft SQL Server –當使用 READ_COMMITTED_SNAPSHOT, 從SQL Server 2005[21]
 - MongoDB – 當使用 WiredTiger[22]儲存引擎
 - MySQL – 使用 InnoDB,[23][24] Falcon,[25] 或 Archive 儲存引擎
 - NuoDB
 - ObjectDB
 - ObjectStore
 - Oracle database – 從 Oracle 4[26][27][28]
 - Oracle (née DEC) Rdb
 - OrientDB[29]
 - PostgreSQL[30]更新的事務如果刪除、修改了資料項並提交,則老的事務將對這些提交結果可見。[31]
 - Postgres-XL
 - Rdb/ELN[32]
 - RDM Embedded[33]
 - REAL Server
 - Realm
 - RethinkDB[34]
 - SAP HANA
 - SAP IQ
 - sones GraphDB
 - Splice Machine[35]
 - Sybase SQL Anywhere
 - Tibero –從 Tibero 3
 - TokuMX[36]
 - Actian Vector
 - Zope Object Database[37]
 
參考文獻
延伸閱讀
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads