2

難しいトピックについて本当に簡単な質問があります。

PouchDB で競合解決はどのように機能しますか?

私はドキュメンテーションを見たり、すぐにグーグルで調べたりしましたが、役に立ちませんでした. では、PouchDB を使用しているアプリケーションで競合管理を処理するにはどうすればよいですか?

4

1 に答える 1

6

API がまったく同じであるため、CouchDB でこれを行う方法を PouchDB 用語に直接変換できます。

conflicts=true競合を要求するために使用して、ドキュメントを取得します( PouchDB では with) get():{conflicts:true}

http://localhost:5984/db1/foo?conflicts=true

次のようなドキュメントを受け取ります。

{
"_id":"foo",
"_rev":"2-f3d4c66dcd7596419c76b2498b3ba21f",
"notgonnawork":"this is from the second db",
"_conflicts":["2-c1592ce7b31cc26e91d2f2029c57e621"]
}

別のデータベースから導入された競合があり、そのデータベースのリビジョンが (ランダムに) 勝利しました。双方向レプリケーションを使用した場合、両方のデータベースが同じ答えを提供します。

どちらのリビジョンも「2-」で始まることに注意してください。これは、両方ともドキュメントの 2 番目のリビジョンであり、両方ともリビジョン ツリーの同じレベルにあることを示しています。

リビジョン ID を使用して、競合するバージョンを取得します ( get()PouchDB{rev=...}の場合:

http://localhost:5984/db1/foo?rev=2-c1592ce7b31cc26e91d2f2029c57e621

あなたが受け取るもの:

{
"_id":"foo",
"_rev":"2-c1592ce7b31cc26e91d2f2029c57e621",
"notgonnawork":"this is from the first database"
}

競合する 2 つのバージョンをユーザーに提示した後、これらの両方の上に 3 番目のリビジョンをPUT( ) 表示できます。put()3 番目のバージョンでは、結果を組み合わせたり、敗者を選択したり、好きなことをしたりできます。

高度な読書:

于 2014-06-27T16:37:13.373 に答える