2012-03-09 11 views
3

CouchDB/CouchCocoaを使用してモバイルアプリケーションにデータを複製する方法を検討しています。CouchDBデータベースの私的部分と共有部分を選択的に複製する方法は?

私たちのシステムには多数のユーザーがいます。データベースの一部は、各ユーザーにプライベートです(タスクなど)。これらは私が問題なしでfiltered replicationを使用して複製できました。

ここにキャッチがあります...データベースには、特定のユーザーに関連する一部の情報のみが含まれています。共有情報を選択的に複製するにはどうすればよいですか?たとえば、ユーザーのタスクが特定の共有文書を参照する場合があります。これらの文書が複製に含まれていることを確認する方法はありますか?すべて共有文書を含めないでください。

ドキュメントからは、doc_idsをレプリケーションに追加する(またはこれらのドキュメントIDを使用して別のレプリケーションを追加する)ことが1つの解決策であるようです。誰がこれを試したことがありますか?他にも解決策はありますか?

編集:各共有ドキュメントを共有するすべてのユーザーにタグを付けるのは実際的ではないようですが、これは唯一の方法です。

答えて

2

最終的な解決策は、主にドキュメントの構造に依存しますが、現在、私は2つのユースケースを参照してください。

  1. あなたは、単一のデータベース内のすべてのものを維持するとして、おそらくあなたが認識するように設定され、いくつかのフィールドを持って、そのドキュメントが共有されていますドキュメントはプライベートなのですか?例:

    所有者:「マイク」

    参加者は:誰も言及していないがある場合は、[] //、文書は次のようになり、民間

    だからあなただけの唯一の民間扱うだろういくつかのフィルタを必要とします(?)タグ、参加者の数、参照、または何らかの形で共有されたもののみが表示されます。

    また、特定のユーザーのみ(たとえばMikeのみ)の一部のドキュメントを複製する必要がある場合は、これらのドキュメントをすべて処理する特別なビューが必要ですが、ドキュメントIDによる複製を使用しますが、アトミックリクエスト:これらの手順を処理するためのサービススクリプトが必要です。共有文書がそれらの参照によって定義されている場合、唯一の解決策ではないサービススクリプト、生成された文書参照ツリー、およびdoc._idによる複製が同じです。

  2. アーキテクチャを確認してください。ユーザごとのデータベースを持つことは、CouchDBの通常のユースケースであり、データの分割と分離の方法に従います。したがって、そのユーザー専用のユーザーデータベースを作成することができます。共有ドキュメントの場合、セキュリティオプションのデータベースメンバーと一緒に演奏する追加のデータベースを作成することができます。それぞれの「共有」データベースは、名前またはグループごとに特定の数の参加者しか処理しないため、CouchDBバグでない限り、データ漏洩はありません(

    )あなたが必要てきたすべてのものは、データベースの作成と公表を扱うでしょう、いくつかの管理スクリプトを作成することがあり、複製はできるだけ簡単だろうとユーザーデータは安全である。

PSは、私が想定してきたその「共有」操作私が間違っていて、 "共有"状態がp2よりも "パブリック"状態を意味するなら、Nユーザーのデータベース+ 1パブリックなものになります。

関連する問題