1

CouchDB を使用してさまざまなソースからのデータを保存し、couchdb-lucene を使用してアドホック クエリを許可しています。フィードにデータを表示し、このフィードをフィルター可能にしたいので、これは私にとって重要です。CLはそれにぴったりのようです。

ただし、フィード アプリへのアクセス許可も導入したいと考えています。ユーザーは、フィード アイテムを表示するアクセス許可を持っている場合にのみ、フィード アイテムを表示できるようにする必要があります。

ここで、アドホック クエリを実行して、現在認証されているユーザーが読み取り権限を持っているフィード アイテムのみを返すことができるようにしたいと考えています。

(これまでのところ)私が理解できる唯一の解決策は、他のユーザーのすべての権限を保存する「権限」フィールドを各フィード項目に追加することでした(明らかに、この項目に対する権限をまったく持たないユーザーをスキップします)

permissions: [{user_id: '123', read: true, write: true}, ...]

次に、CL でこの配列にインデックスを付けます。

これはおそらく機能しますが、フィード アイテムにパーミッション メタデータをネストすることを強いられるのはちょっと気分が悪いです...別々にしておくよりも良い解決策かもしれませんが、私はそれが好きではないようですここで選択すること。

他の唯一の解決策 (CouchDB をダンプする以外) は、パーミッションを気にせずにアドホック クエリを実行し、サーバーで 2 つ目のクエリを実行して、すべての「自分のアイテム」を選択し、交差を設定することです。しかし、これらのセットは巨大になる可能性があります (チャンクすると、おそらく多くの DB リクエストが必要になります => 遅くなります)。

私の解決策は問題ありませんか、それとももっと良いものがありますか? それとも、CouchDB はそのようなクエリには適していないのでしょうか?

乾杯!

4

1 に答える 1

0

ドキュメント自体にその許可データを保持することで、正しい道を進んでいます。これは、後でビューを作成する最も簡単な方法であり、ユーザーのアクセス許可を確認できます。ですから、心配しないで、その方向に流れさせてください。そのデータを入れ子にすることについて気分が悪いのは、おそらく、SQL や RDBMS を使用していた以前の時代から来ており、各テーブルを完全に正規化する必要がありました。今回は完全に違います:)

ところで、CouchDB で "JOINS" を実行する唯一の方法は、Linked Documentsを使用することです。興味があれば、試してみることができます。ただし、ビューの作成中に、リンクされたドキュメントの内部を見ることはできません。

于 2014-05-13T05:41:15.653 に答える