由於MongoDB不支持交易,有什麼方法可以保證交易嗎?有沒有什麼方法可以保證用戶端的交易
回答
我認爲ti是您在選擇NoSQL解決方案時選擇放棄的一件事。
如果需要交易,也許NoSQL不適合你。是時候回到ACID關係數據庫了。
MongoDB只支持原子操作。在MongoDB的頂層上的ACID 意義上沒有辦法實現事務。這種交易支持必須在覈心中實施。但是由於CARP定理,您永遠不會看到完整的交易支持。您無法同時擁有速度,耐用性和一致性。
「保證交易」是什麼意思?
MongoDB中有兩個conept類似;
- 原子操作
- 使用安全模式/ GetLastError函數 ...
http://www.mongodb.org/display/DOCS/Last+Error+Commands
如果你只是需要在運行例如更新知道是否有錯誤您可以使用getlasterror命令,從文檔...
getlasterror主要用於 寫入操作(儘管在命令或查詢後也設置爲 )。寫入 默認情況下沒有 返回碼:這樣可以節省客戶端 在寫入操作期間等待客戶端/服務器 週轉。 如果人們想要一個返回碼,那麼總是可以調用getLastError( )。
如果你正在寫數據到MongoDB的上 多個連接,那麼它可以 有時是重要的調用 GetLastError函數在一個連接是 肯定的是,數據已經 提交到數據庫。對於 例如,如果你正在寫 連接#1,並希望那些寫入 體現在從連接#2讀取,你可以寫 連接#後,通過調用GetLastError函數保證這個1.
另外,您也可以使用原子操作在您需要遞增例如值(如一個給予好評,等等),詳細瞭解這裏的情況:
http://www.mongodb.org/display/DOCS/Atomic+Operations
作爲一個側面說明,我SQL的默認存儲引擎也沒有事務!:) http://dev.mysql.com/doc/refman/5.1/en/myisam-storage-engine.html
不幸的是,MongoDB並不支持開箱即用的交易,但實際上您可以在其上實施ACID樂觀交易。我在GitHub頁面上寫了一個例子和一些解釋。
- 1. 有沒有一種客戶端可以看到$ _SESSION中有什麼的方法?
- 2. 有沒有什麼方法可以使用'unset'作爲方法?
- 3. 有什麼方法可以在Redis中存儲客戶端IP?
- 4. 有什麼辦法可以使用CFNetwork實現客戶端證書認證嗎?
- 5. 爲什麼MongoDB沒有交易?
- 6. 交易方法拋出「沒有事務性的entityManager可用」
- 7. 有沒有什麼方法可以重用java 8中的Stream?
- 8. 有什麼辦法用戶可以禁用c#中的服務器端驗證
- 9. 沒有交易
- 10. 有沒有什麼方法可以在Harp.js中使用Jade塊?
- 11. 有沒有什麼方法可以檢測到braintree.js表單的提交點擊?
- 12. 有沒有什麼可以嚴格的在Laravel的方法?
- 13. 有沒有什麼方法可以在Shopify中以編程方式驗證客戶身份?
- 14. 有沒有什麼辦法以儘可能改變ALAssetLibrary的方式保存ALAsset?
- 15. 有沒有比交易更有效的方法?
- 16. 有沒有什麼方法可以查詢bean的spring容器
- 17. 有什麼辦法可以在ASP.NET 5中使用客戶端證書嗎?
- 18. 有什麼方法可以用一些REST客戶端替換Symfony中的Doctrine?
- 19. 有沒有一種方法可以向訪問者證明服務器端以前做了什麼?
- 20. TCPDF - 爲什麼保證金沒有用?
- 21. 用現有的交易方法換行交易?
- 22. 有沒有什麼方法可以確保函數編譯爲JIT?
- 23. 沒有PayPal賬戶的參考交易
- 24. 有沒有什麼方法可以縮短這個代碼呢?
- 25. 有沒有什麼方法可以替代iframe?
- 26. 有沒有什麼方法可以在html中查看文件?
- 27. 有沒有什麼方法可以去除這種水印?
- 28. 有沒有什麼方法可以定義javascript模式
- 29. 有沒有什麼方法可以在Windows中模擬LD_LIBRARY_PATH?
- 30. 有沒有什麼方法可以在JavaScript中凍結document.body.innerHTML?
不是CouchDB ACID? http://couchdb.apache.org/docs/overview.html – ascobol 2011-05-12 22:06:21