2010-04-16 61 views
26

在.NET中使用MongoDB和NoRM。MongoDB交易?

讓我困惑的事 - 沒有交易
(不能只是告訴MongoConnection.Begin/EndTransaction或類似的東西)。

我想在工作失敗的情況下使用Unit of work模式和回滾更改。

如何通過ITransaction來豐富我的存儲庫還有一個簡潔的方法嗎?

回答

28

MongoDB不支持複雜的多文檔事務。如果這是你絕對需要的東西,那可能不適合你。

但是,在大多數情況下,我們發現複雜的交易不是必需的。 MongoDB中的所有操作在單個文檔中都是原子的,我們支持很好的update modifiers,這使得很多操作需要易於實現(和快速)的事務。

+0

我沒有得到'update modifiers'部分。他們到底能夠幫到什麼? (請記住,我是這個完整的新手:) :) – 2010-04-17 06:22:17

+1

更新修飾符允許您使用單個操作自動執行某些複雜的操作 - 認爲像「通過x增加此字段的值」或「添加一個新值這個數組「。 – mdirolf 2010-04-19 13:20:14

+0

@mdirolf如果他進入他依賴TRANSACTIONS的場景,應該重構嗎? – Tushar 2014-10-05 15:08:10

17

確實,MongoDB不支持開箱即用的交易,但您可以自行實施樂觀交易。他們很適合工作單位。我寫了一個java例子和一些關於GitHub的解釋,所以你可以在C#中輕鬆地重複。

+2

這是一個很好的例子。真可惜它不是在MongoDB內部以這種方式實現的,即使是可切換的抽象/插件。 – gertas 2012-10-12 07:26:59

+1

太棒了,謝謝你這麼做。 +10,如果我可以。 – jcollum 2013-01-31 01:57:36

+0

如果您需要mongodb中的交易,您應該重新考慮您的軟件設計/體系結構 – dit 2016-03-11 22:33:19

1

備案記錄。

雖然MongoDB中沒有事務支持,它支持atomicity on a single document

MongoDB的確實有一個單一的文件中的原子操作的支持。鑑於嵌套文檔提供的可能性,此功能爲大量的用例提供支持。

另外,關於「Isolate Sequence of Operations」的手動輸入可能很有趣。例如:

但是,您可以隔離使用隔離操作符影響多個文檔的單個寫入操作。

0

您可以改用MongoDb TokuMX。

http://www.tokutek.com/products/tokumx-for-mongodb/

TokuMXTM是一個開放源碼,MongoDB的高性能分佈,相比於基本的MongoDB已顯着提高的性能和操作效率。 TokuMX是MongoDB的直接替代產品,性能提升了20倍,數據庫大小減少了90%,並支持使用MVCC的ACID事務。

1

從v4.0開始(2018年夏季即將到來),MongoDB將支持多文檔ACID事務。通過快照隔離,事務將提供全球一致的數據視圖,並執行全有或全無執行來維護數據完整性。有關更多信息和測試版,請參閱https://www.mongodb.com/transactions

在此blog post中,我還概述了我們的多文檔ACID事務的過程,以防您對歷史和推理感興趣。

1

MongoDB 4。0將增加對多文檔交易的支持。

https://www.mongodb.com/transactions

+0

而不僅僅是提供鏈接,請將關鍵文本放入您的答案中。否則,如果鏈路斷開,我們將失去答案! :) – sniperd 2018-02-23 19:13:02