2011-02-24 54 views

回答

2

我認爲ti是您在選擇NoSQL解決方案時選擇放棄的一件事。

如果需要交易,也許NoSQL不適合你。是時候回到ACID關係數據庫了。

+0

不是CouchDB ACID? http://couchdb.apache.org/docs/overview.html – ascobol 2011-05-12 22:06:21

3

MongoDB只支持原子操作。在MongoDB的頂層上的ACID 意義上沒有辦法實現事務。這種交易支持必須在覈心中實施。但是由於CARP定理,您永遠不會看到完整的交易支持。您無法同時擁有速度,耐用性和一致性。

4

「保證交易」是什麼意思?

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

2

不幸的是,MongoDB並不支持開箱即用的交易,但實際上您可以在其上實施ACID樂觀交易。我在GitHub頁面上寫了一個例子和一些解釋。

相關問題