2011-05-17 61 views
3

據我所知,CouchDb從不會覆蓋記錄,而是用新的_rev創建一個新文檔。在這種情況下會發生什麼?CouchDb和數據寫入

  1. 用戶A讀取文件
  2. 用戶B讀取相同的文件
  3. 用戶A更新文檔
  4. 用戶B更新文檔

不是用戶在失去了A的變化這種情況?

回答

6

不,用戶B會得到409錯誤,因爲轉速將不再匹配。對於用戶B提交他們的文檔,他們將需要重新獲取文檔,以便他們可以獲得最新的文檔修訂。

這稱爲樂觀鎖定,旨在專門防止您看到的問題。

沒有什麼能夠阻止用戶B跺腳用戶A的文檔,但現在他們更需要重新讀取文檔並使用新的_rev參數。

+2

可以允許用戶B的更改,以便至少B的客戶端可以成功地以一次往返的方式存儲更新。但是這會在一些客戶端軟件必須解決的CouchDB中導致*衝突。但是,正如威爾所說,在大多數情況下,人們會提早失敗,並讓B(或B的軟件)重新運行查詢 – JasonSmith 2011-05-18 00:29:16