【问题标题】:CouchDB _design document conflict detectionCouchDB _design 文档冲突检测
【发布时间】:2011-08-19 09:35:45
【问题描述】:

我知道 CouchDB 会识别复制后发生冲突的文档。 CouchDB 对 _design 文档的冲突检测处理是否与常规文档不同?例如,我在 DB1 中修改了一个 _design 文档。然后我在 DB2 中修改相同的 _design 文档。然后我将 DB1 复制到 DB2。我希望 CouchDB 识别出冲突,但是在复制之后,Couch 不会返回任何冲突。

【问题讨论】:

    标签: couchdb


    【解决方案1】:

    设计文档与普通文档完全一样,因此命名为“设计文档”而不是“沙发程序”等。

    如果您对不同数据库中的相同文档进行相同的修改,您将有没有冲突。运行 couchapp push 可能会产生这种情况,如果您将同一个应用程序推送到两个不同的数据库(并且它们以相同的 _rev 开头)。

    否则,无论设计文档与否,您都会遇到冲突。当然,couch 会将一个修订版“提升”为规范版本,但如果您在视图中检查_conflicts,您会看到它们。 (要在视图中查看设计文档,您还必须启用include_design 选项。)

    { "_id": "_design/example"
    , "views":
      { "conflicts":
        { "options": {"include_design": true}
        , "map": "function(doc) { if(doc._conflicts) emit(doc._id, doc._conflicts); }"
        }
      }
    }
    

    使用键范围扫描查找冲突的 ddocs:

    ?startkey="_design/"&endkey="_design0"
    

    【讨论】:

    • 我们对所有非设计文档都有 _conflicts 视图。但是,_design 文档不适用于视图。任何关于如何在成功复制后获取所有冲突的 _design 文档列表的建议将不胜感激。谢谢。
    • 我更新了答案。设计文档确实使用视图,但这是一个可选设置,默认为false。激活它后,您将看到 ddoc 冲突。 (你也可以把它放在一个完全独立的视图中,由你决定。)
    • 我不得不将选项放在视图旁边,而不是在视图中,然后它会影响所有视图。我使用的是 1.2.0 版本,并且在更改日志中没有看到任何表明可以将选项放在单个视图中的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多