MongoDB已經(jīng)更新到4.0版本帆卓,支持ACID及多文檔事務(wù)见芹。
在MongoDB中骆姐,單個(gè)文檔的操作是原子的始绍。在實(shí)際案例中胜茧,我們可以在單個(gè)文檔中使用內(nèi)嵌文檔及數(shù)組室叉,而不是在多個(gè)集合和文檔中存儲(chǔ)數(shù)據(jù)抑片,這樣可以省去了多文檔事務(wù)的麻煩卵佛。
不管怎樣,對(duì)于要求多文檔更新原子性敞斋、讀取一致性的情形截汪,MongoDB提供了針對(duì)副本集執(zhí)行多文檔事務(wù)的能力。多文檔事務(wù)可以跨多個(gè)操作植捎、集合衙解、數(shù)據(jù)庫和文檔使用。多文檔事務(wù)中的操作焰枢,要么全部執(zhí)行蚓峦,要么全部不執(zhí)行。事務(wù)提交后济锄,其中的所有數(shù)據(jù)更改都會(huì)保存下來暑椰。如果任何操作失敗,事務(wù)終止荐绝,事務(wù)中的數(shù)據(jù)變更會(huì)丟棄并且不再可見一汽。在事務(wù)提交之前,事務(wù)外對(duì)事務(wù)中的寫入操作不可見低滩。
大多數(shù)情況下召夹,多文檔事務(wù)比單文檔寫入需要更多的性能開銷,并且多文檔事務(wù)不應(yīng)該取代有效的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)(也就是說建議優(yōu)先考慮合理的設(shè)計(jì)恕沫,而不是依賴多文檔事務(wù))戳鹅。對(duì)于許多場(chǎng)景,非規(guī)范化的數(shù)據(jù)模型(內(nèi)嵌文檔和數(shù)組)對(duì)于我們的數(shù)據(jù)和用例還是最佳方案昏兆,適當(dāng)?shù)臄?shù)據(jù)模型將減少對(duì)多文檔事務(wù)的需求枫虏。
目前多文檔事務(wù)只支持副本集妇穴,分片集群的事務(wù)支持計(jì)劃在4.2版本實(shí)現(xiàn)。
多文檔事務(wù)僅適用使用WiredTiger存儲(chǔ)引擎的部署隶债。
For transactions:
You can specify read/write (CRUD) operations on existing collections. The collections can be in different databases.
You cannot read/write to collections in the
config
,admin
, orlocal
databases.You cannot write to
system.*
collections.You cannot return the supported operation’s query plan (i.e.
explain
).For cursors created outside of transactions, you cannot call
getMore
inside a transaction.For cursors created in a transaction, you cannot call
getMore
outside the transaction.
多文檔事務(wù)中不允許影響數(shù)據(jù)庫目錄的操作腾它,如:創(chuàng)建、刪除集合或索引死讹。更多限制操作可以查看 受限操作.
The following mongo shell methods are available for transactions:
Spring Boot項(xiàng)目中關(guān)于MongoDB的事務(wù)支持 -> Spring Boot - 數(shù)據(jù)庫操作之MongoDB