2016-08-02 12 views
1

「スタート」と「終了」という2つのプロパティを持つドキュメントがあるとします。 1つのリビジョンにはStartの時間があり、Endにはnullがあり、その逆もあります。勝者として1つのリビジョンを選択するのではなく、最後のドキュメントにリビジョンの開始時刻が含まれるようにしたい。CouchDBでの競合の処理

同期中にこのタイプの競合解消を処理するためのベストプラクティスはありますか?私が見つけたドキュメンテーションには、1つのリビジョンを勝者として選択するための手順が書かれていますが、複数の回覧から値を選択したいと思います。

C#/ MyCouchライブラリに固有の例は素晴らしいでしょうが、一般的なまたは他の言語のアドバイスも高く評価されます。

答えて

1

レプリケーション(a.k.a. sync)中にカスタムの競合解決方法を指定することはできません。同じ選択は、すべてのピアで を作らされるように、決定論的なアルゴリズムを使用して

デフォルトでは、CouchDBのは「勝者」として任意の一つのリビジョンを選び、 :CouchDBのは自動的に勝利リビジョンを選択し、あなたがそれに影響を与えることはできません。

ドキュメントのリビジョンのアプリケーション固有のマージを実行することで、レプリケーションが完了し、その後に競合が発生するのを待つことができます。 _conflicts配列の各メンバーのために真の

  1. GETのDOCID競合=
  2. :?Working with conflicting documentsのドキュメントを見ると

    が、私は次の擬似コードの例を見つけた? GETのDOCID REV = XXX この段階でエラーが発生した場合は、手順1から再起動してください。 (他の誰かがこの の競合を解決してそのレビを削除したレースがある可能性があります)

  3. アプリケーション固有のマージを実行する
  4. _bulk_docsに最初のリビジョンの更新を書き出し、 のリビジョンを削除します。
関連する問題