10

ユーザーとそのドキュメントの構造に関して、概念的な質問が少しあります。

ドキュメントを保持する独自のデータベースを CouchDB 内の各ユーザーに提供することは良い習慣ですか?

私は、couchDB が何千ものデータベースを処理できること、および各ユーザーがデータベースを持つことはそれほど珍しいことではないことを読みました。

理由:

この質問をする理由は、ログインしたユーザーが自分のドキュメントのみを表示でき、他のユーザーのドキュメントを表示できないシステムを作成しようとしているからです。

助言がありますか。

前もって感謝します。

4

4 に答える 4

3

これは、Android、iOS、または JavaScript (pouchdb) ライブラリのいずれかを使用して各ユーザーのデータがデバイスに同期されるモバイル環境では特に、非常に一般的な使用例です。

コンセプトとしては問題ありませんが、本番環境に入る前に徹底的にテストすることをお勧めします。

複数のデータベースの欠点の 1 つは、複数のデータベースにまたがるクエリを作成できないことです。ただし、いくつかの回避策があります。詳細については、Cloudant: Searching across databases を参照してください。


2017 年 3 月 17 日の更新:

このアプローチの詳細については、Cloudant Envoy をご覧ください。

ユーザーごとのデータベースは、各アプリケーション ユーザーが (モバイル デバイスやブラウザーなどに) 同期できる独自のドキュメント セットを持つ必要がある場合に、CouchDB でよく使用されるパターンです。表面的には、これは優れたソリューションです。Cloudant は、単一のインストール内で多数のデータベースを非常にうまく処理します。でも ...

ソース: https://github.com/cloudant-labs/envoy

于 2015-02-16T11:44:07.157 に答える
2

ソリューションは Web アプリケーションと同じくらい古いものです。MySQL データベースについて考えてみると、データベースにはユーザー A に属するレコードをユーザー B が表示するのを止めるものは何もありません。すべてアプリケーション層でコード化されています。

同様に、CouchDB には、ユーザー B がユーザー A によって作成されたドキュメントにアクセスできないようにする完全に安全な方法はありません。以前と同様に、アプリケーション層でこれをコーディングする必要があります。

CouchDB とユーザーの間に Web アプリケーションがあれば、問題はありません。問題は、CouchDB がリクエストを直接処理できるようにした場合に発生します。

于 2015-02-18T02:56:55.630 に答える
1

複数のユーザーに複数のデータベースを使用することには、いくつかの重要な欠点があります。

  • ネイティブのcouchdb APIでは、異なるデータベース内のデータに対するクエリは実行できません。ウェブサイトの全体的なステータスを分析することはまったく不可能です。
  • メンテナンスはすぐに非常に困難になります。バックアップを実行するたびに、何千ものデータベースを複製/圧縮することを考えてみましょう

ユースケースにもよりますが、良いアプローチは次のようになると思います:

  1. 仮想ホスト経由でのみアクセスを許可します。これは、プロキシを使用するか、「ドメイン->パス」マッピングを微調整できるcouchdbホスティングプロバイダーを使用することでより簡単に実現できます

  2. 読み取り/書き込み操作には、ドキュメント CRUD API を直接使用する代わりに、 design docs / couchappsを使用します。

    2.1. _rewriteハンドラーを使用して有効なリクエストのみを許可する: このようにして、_all_docs、_all_dbs などの適切なハンドラーへのアクセスを即座にブロックできます。

    2.2. リストを使用したCouchDb 読み取り認証で説明されているように、読み取りドキュメント/ロール ベースの ACLに_listおよび_viewハンドラーを使用する

    2.3. 書き込みドキュメント/ロール ベースの ACLに_updateハンドラを使用する

    2.4. 読み取り/書き込みロール ベースの ACLの認証済み書き換えルールを使用します。

    2.3. フィルター処理された_changesハンドラーは、読み取りドキュメント/ロール ベースの ACL を使用してすべてのユーザーのデータを取得する別の方法です。ユースケースに応じて、これにより読み取り API を可能な限り効率的に簡素化し、更新 API に集中できるようになります。

于 2015-02-18T09:51:32.157 に答える