2

私はそのシステムアーチを持っています:という名前のマスターデータベースとという名前masterのユーザーデータベースuser1user2。マスターデータベースからuser1user2dbsの両方にドキュメントを複製しています。次に、ユーザーはDB内のそのドキュメントを個別に変更します(たとえば、user1addsフィールドtags:[1, 2]とuser2addstags:[3, 4]フィールド)。tagsここで、ユーザーデータベースからマスターに複製し、新しく追加されたフィールドをマージして、結果をにしたいと思いますtags:[1,2,3,4]。また、結果のタグをにするロジックをレプリケーションで実行する必要があるかもしれませんtags:[1,2,4]

正しいアプローチは何ですか?

4

2 に答える 2

3

これは、レプリケーション + 競合によって簡単に解決されます。競合をチェックし、タグをマージしてから新しいドキュメントを書き込むマスター外部プロセスを用意します。

于 2012-04-22T20:52:04.597 に答える
1

最終結果でタグ「3」をどのようにドロップしたいかは言わないので、完全な答えを出すのは難しい.

CouchDB ドキュメントには、この種のシナリオを処理するためのさまざまな方法に関する有益な情報がたくさんあります。データを保存する方法と、保存されたデータを使用して競合を解決する方法を設計します。これには、次の「競合解決でドキュメントをフェッチするための推奨コード」が含まれます

  1. GET docid?conflicts=true
  2. _conflicts 配列の各メンバーに対して: GET docid?rev=xxx この段階でエラーが発生した場合は、ステップ 1 からやり直してください。
  3. アプリケーション固有のマージを実行する
  4. 最初のリビジョンへの更新と他のリビジョンの削除を含む _bulk_docs を記述します。

また、「これは、読み取りごとに実行することも (この場合、アプリケーションでの GET へのすべての呼び出しを、上記を実行するライブラリへの呼び出しに置き換えることができます)、またはスイーパー コードの一部として実行することもできます。」さらに、Ruby での完全な例を示します。

それはあなたのすべての質問に答えていますか?

于 2012-04-24T05:28:56.393 に答える