2010-11-17 64 views

回答

0

在Ruby驅動程序中沒有辦法做到這一點,因爲在MongoDB中沒有辦法做到這一點。 Mongo僅支持單文檔原子操作。所以基本上,一個文檔的插入,更新或刪除是以原子方式完成的,而不是跨多個文檔的操作。

如果發生錯誤,您可以通過嘗試手動「回滾」來僞造交易。在這種情況下的回滾將是用先前的值替換任何更改。但是這是手動的,並且沒有ACID保證可以從大多數SQL服務器獲得。

1

因爲您可以對單個文檔執行原子操作,所以有多種方法可以模擬您想要的內容。看到這篇文章:

http://kylebanker.com/blog/2010/06/07/mongodb-inventory-transactions/

而對於一些想法有背後的原理,看到這樣一句:

http://www.eaipatterns.com/docs/IEEE_Software_Design_2PC.pdf

+0

的事情是,這個效果很好,如果事情「出錯」,即發生錯誤。但是,我更擔心的是沒有錯誤,沒有錯誤,從應用程序的角度來看數據沒有問題,但它們對用戶來說是錯誤的。而當我們部署到Heroku時,我甚至無法確定如果用戶向我們發送了兩個請求,那麼這兩個請求將按照它們發送的相同順序處理(每個請求可以被分配到不同的測試儀,每個可以在無效時處理,但技術上正確/可能的數據集)。不太可能,不要批評,但是讓我失望:) – PJK 2010-11-18 22:30:03