3

ユーザー固有のドキュメントをフィルタリングするためCouchDBに、サーバー側でフィルター関数を作成しようとしています。このフィルターは、TB 規模のデータベース全体ではなく、特定のユーザーがアクセスできるいくつかの選択されたドキュメントのみの複製を許可します。

ここで、同様の質問CouchDB: Restricting users to only replicating their own documents but it does not provide me that I need.

だから私の質問は残ります:

  1. このようなフィルターを指定する最善の方法は何ですか?
  2. このようなフィルター関数をどのように記述すればよいですか?
  3. フィルターがこのように機能するように、すべてのドキュメントに何を含める必要がありますか:

    ソーシャル ネットワークのコンテキストで、画像などのユーザー データをサーバーから取得するとします。この場合、画像を含むドキュメントが保持userIdされます。しかし、この人の友人が彼のプロフィールにアクセスし、それらの写真も表示できる場合があります。その場合、友人が自分のプロフィールにアクセスするたびに、Picture doc が友人に複製され、友人もそれらの写真を表示できるようになります。

どうすればそのようなフィルターを実現できますか?

詳細情報:モバイル プラットフォーム側では CouchbaseLite を使用し、サーバー側では CouchDB を使用しています。モバイル プラットフォームでフィルター処理されたドキュメントのみが必要です。

4

2 に答える 2

6

CouchDB フィルター関数は、フィルター処理される 1 つのドキュメントにしかアクセスできないため、他のドキュメントの情報を使用することはできません。これにより、写真投稿ドキュメントから所有者ドキュメントへの逆参照を行って所有者の友人リストを検索するなど、「結合のような」アプローチが除外されます。

基本的に、それを取得する必要があるユーザーの正確なセットをリストするプロパティをすべてのドキュメントに含める必要があります。

また、これはいかなる種類のアクセス制御も提供しないことに注意してください。CouchDB 内のドキュメントへの読み取りアクセスを選択的に拒否する方法はないため、ユーザーが見知らぬ人のフォト アルバムを表示するのを防ぐことはできません。これを行うには、ユーザーごとのデータベース アプローチを使用する必要がありますが、これには欠点があります。データベース間でドキュメントを共有するために、データベース間で多くのレプリケーションを設定する必要があり、うまく拡張できません。 .

Couchbase Sync Gateway ( https://github.com/couchbase/sync_gateway ) を見てみましょう。CouchDB とのレプリケーション互換性がありますが、まさにこの種の選択的な同期とアクセス制御を可能にする機能が追加されています。それを使ってソーシャルネットワークを実装することは間違いなく実現可能です。これは、設計時に念頭に置いていた使用例の 1 つです。(私はプロジェクトの主任エンジニアです。)

于 2014-03-11T19:10:31.290 に答える
2

データの構造を変更し、デバイス上でレプリケートする多くの小さなデータベースと、実装するフィルターを使用してこの小さなデータベースでレプリケートする中央データベースを作成できます。

これは多くの場合、ユーザーが一部のドキュメントのみにアクセスできるようにするために行われます。

レプリケートする必要があるユーザーを含むドキュメントに配列フィールドを追加する必要があると思います。

また、中央データベースの _replicate には、セカンダリ データベースごとに 1 つのドキュメント レプリケーションが含まれており、それぞれにレプリケーション フィルターが含まれています。

このフィルターは、ドキュメントをレプリケートする必要があるユーザー (セカンダリ データベースが属するユーザー) が users 配列に含まれていることを確認します。



そうでなければ、Couchbase + Sync Gateway の使用を考えたことはありますか?

于 2014-03-07T15:27:35.970 に答える