我有两个数据库,在这两个数据库之间触发双向复制.
如果它们之间的网络链接断开,并且在两个数据库中对具有相同Id的特定文档进行了更改,则会发生冲突,并且在恢复链接后可能会选择其中一个修订.
我想合并两个相互冲突的修订版,以免丢失任何更改.我怎么能这样做?
CouchDB在线预订了一个很好的章节:http: //guide.couchdb.org/draft/conflicts.html
您还可以阅读wiki:http: //wiki.apache.org/couchdb/Replication_and_conflicts
这是一些摘录.
找出冲突:
function(doc) {
if(doc._conflicts) {
emit(doc._conflicts, null);
}
}
Run Code Online (Sandbox Code Playgroud)
找到冲突后,您必须确定如何合并这两个文档.CouchDB不做任何假设,所以你必须自己做.这是因为合并是域问题.一旦你有了执行合并的策略,你就可以处理文档了.
让我们获得胜利者和冲突文件
GET /db/bob?conflicts=true
Run Code Online (Sandbox Code Playgroud)
您将获得胜利者加上一个_conflicts成员,其中包含其他相互冲突的修订版本的转数.然后,您可以使用后续的GET/db/bob?rev = xxxx操作单独获取它们.
一旦检索到所有冲突的修订,您的应用程序就可以选择将它们全部显示给用户.或者它可以尝试合并它们,写回合并的版本,并删除冲突的版本 - 即永久解决冲突.
如上所述,您需要更新一个修订版并明确删除所有冲突的修订版.这可以使用单个POST到_bulk_docs来完成,设置"_deleted":对于您要删除的修订版本为true.
我已经从维基和CouchDB书中提取了上述内容,但我希望它能更清楚地说明从哪里开始.
归档时间: |
|
查看次数: |
327 次 |
最近记录: |