热门问题
时间线
聊天
视角
多版本並行控制
来自维基百科,自由的百科全书
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