2012-04-13 30 views
2

我有那個系統拱:主數據庫名爲master和用戶數據庫名爲user1user2。我正在將master數據庫中的文檔複製到user1user2 dbs。然後,用戶分別在其DB中修改該文檔(例如,用戶1添加tags:[1, 2],用戶2添加tags:[3, 4]字段)。現在我想從用戶數據庫複製回主併合並新添加的tags字段,因此其結果爲tags:[1,2,3,4]。另外,我可能需要運行一些複製邏輯,使結果標記爲tags:[1,2,4]從每個用戶數據庫到主數據庫的CouchDB複製

什麼是正確的方法?

+1

您應該管理衝突:http://wiki.apache.org/couchdb/Replication_and_conflicts – 2012-04-14 07:52:40

+0

標籤是在用戶文檔還是他們自己的文檔中? – 2012-04-19 19:51:12

+0

標籤是FEED文檔中的字段,它只是{_id:'xxx',名稱:'yyy',標籤:[]) – Archer 2012-04-20 07:22:50

回答

1

你不會說你如何在最終結果中放置標籤「3」,所以很難給出完整的答案。

關於在CouchDB文檔中處理這種場景的各種方法有很多很好的信息。 Designing how you store the data以及如何use the stored data to resolve conflicts包括以下「建議的代碼來獲取與解決衝突的文件」

  1. GET文檔ID衝突=真
  2. 對於_conflicts陣列中的每個成員:?? GET文檔ID轉= XXX 如果發生在這個階段的任何錯誤,從步驟1重新開始 (有可能是其中有人已經解決了這個 衝突,並刪除了REV比賽)
  3. 執行應用程序特定合併
  4. 寫_bulk_docs更新到第一個rev並刪除 另一個rev。

報告還指出:「這既可以在每次讀來實現(在這種情況下,您可以取代所有調用與調用它可以完成上述庫您的應用程序獲取),或作爲您的清掃代碼的一部分「。它繼續在Ruby中給出一個完整的例子。

這是否回答你所有的問題?

3

這只是用複製+衝突解決。擁有一個檢查衝突的主外部流程,合併標籤&然後寫入新文檔。

相關問題