2

我有那个系统架构:名为 master 的数据库和名为and的master用户数据库。我正在将文档从主数据库复制到数据库和数据库。然后用户在他们的数据库中单独修改该文档(例如 user1 添加和 user2 添加字段)。现在我想从用户数据库复制回 master 并将新添加的字段合并到. 此外,我可能需要在复制上运行一些逻辑,以使结果标签为.user1user2user1user2tags:[1, 2]tags:[3, 4]tagstags:[1,2,3,4]tags:[1,2,4]

什么是正确的方法?

4

2 回答 2

3

这可以通过复制+冲突简单地解决。有一个主外部进程来检查冲突、合并标签然后编写新文档。

于 2012-04-22T20:52:04.597 回答
1

您没有说您可能希望如何在最终结果中删除标签“3”,因此很难给出完整的答案。

在 CouchDB 文档中有很多关于处理这种场景的各种方法的好信息。设计如何存储数据以及如何使用存储的数据来解决冲突,其中包括以下“获取具有冲突解决方案的文档的建议代码”

  1. 获取 docid?conflicts=true
  2. 对于 _conflicts 数组中的每个成员: GET docid?rev=xxx 如果在此阶段发生任何错误,请从步骤 1 重新开始。(可能存在其他人已经解决此冲突并删除该 rev 的竞赛)
  3. 执行特定于应用程序的合并
  4. 写入 _bulk_docs 并更新第一个 rev 并删除其他 revs。

它还指出“这可以在每次读取时完成(在这种情况下,您可以将应用程序中对 GET 的所有调用替换为对执行上述操作的库的调用),或者作为扫描程序代码的一部分。” 它继续给出了一个完整的 Ruby 示例。

这能回答你所有的问题吗?

于 2012-04-24T05:28:56.393 回答