難しいトピックについて本当に簡単な質問があります。
PouchDB で競合解決はどのように機能しますか?
私はドキュメンテーションを見たり、すぐにグーグルで調べたりしましたが、役に立ちませんでした. では、PouchDB を使用しているアプリケーションで競合管理を処理するにはどうすればよいですか?
難しいトピックについて本当に簡単な質問があります。
PouchDB で競合解決はどのように機能しますか?
私はドキュメンテーションを見たり、すぐにグーグルで調べたりしましたが、役に立ちませんでした. では、PouchDB を使用しているアプリケーションで競合管理を処理するにはどうすればよいですか?
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 番目のバージョンでは、結果を組み合わせたり、敗者を選択したり、好きなことをしたりできます。
高度な読書: