6

こんにちは、couchapps のドキュメントごとの読み取りアクセスを実装する 2 つの方法について読みました。

  1. 各ユーザーは、このユーザーが読み取ることができるデータのみを含む独自のデータベースを取得します。次に、すべてのユーザーは、誰が何を読み取ることができるかを決定するレプリケーション フィルターを使用して、すべてのユーザー データベースにレプリケートされるマスター データベースに書き込みます。
  2. リスト機能を使用して、他のビューの出力をフィルタリングし、プロキシ サーバーとホワイトリストを介してアクセスを制限します。

これについていくつか質問があります。

  1. ドキュメント レベルで読み取りアクセスを取得する可能性は他にありますか?

  2. couchapp でユーザーのプライベート データベースを作成するにはどうすればよいですか? そのためには管理者権限が必要ですが、アプリケーションのサインアップ フォームに記入するユーザーは、明らかに管理者権限を持つことができません。必要なデータベースを作成できるように、サインアップ プロセスに中間層 (php など) が必要ですか?

  3. 最終的にこのデータベースを取得したら、フィルターを使用して連続レプリケーションを開始する必要があります。サーバーの再起動時にそのようなレプリケーションが再開されないことをどこかで読みました。サーバーがクラッシュした場合に備えて、x 時間ごとにこれらのレプリケーションを再作成する chronjob が必要ですか??

  4. それはディスク容量の膨大な浪費ではありませんか? ほとんどのデータは、アプリケーションに登録するすべてのユーザーに対して複製されますか、それとも間違っていますか? (特に、他の人に読まれてはならない情報がほとんどない場合)

4

2 に答える 2

2
  1. たとえば、CouchDB ソース コードを変更する以外に、すぐに実行できる方法は他にありません。1 つの可能性は、 externals APIを持つ可能性のあるトランク (またはリリースされた場合は v1.1) を使用することです。Externals は、CouchDB がいくつかの接続を転送する Web サーバーです。

  2. 3 番目のレイヤーが必要ですが、必ずしも中間レイヤーである必要はありません。外部ソフトウェアは管理者として CouchDB に接続し、保留中のタスクを実行します。たとえば、ユーザーが新しいデータベースを必要とする場合、パブリック DB にドキュメントを作成すると、外部ソフトウェアがデータベースを作成し、ユーザーを管理者として割り当てます。クエリを実行することは非常に簡単/_changes?feed=continuousです。ユーザーからの更新のリアルタイム フィード。ソフトウェアがよりシンプルで (追加の Web 開発はなく、CouchDB の GET と PUT のみ)、ユーザーに大きな影響を与えずにクラッシュ、再起動、アップグレードなどを行うことができるため、私は中間層の代わりにこれを好みます。

  3. とにかく、cron ジョブは悪い考えではありません。ねえ、それは上記のステップ 2 の外部プロセッサの一部である可能性があります! ただし、CouchDB 1.1 からは、Couch の再起動後にレプリケーションが再開されます。

  4. 多くのスペースを無駄にすべきではありません。アプリケーションによっては、共有データベース内のすべての共有データと、ユーザーごとのプライベート データベース内のすべてのプライベート データを取得する必要があります。しかし、たとえデータの重複があっても、私はそれを無駄とは呼びません。ディスク容量は、開発者の労力やセキュリティ問題の目に見えないコストと比較すると、非常に小さな費用です。

アプリケーションによっては、将来、モバイルまたはオフライン機能に大きなチャンスがあります。iPhone、デスクトップ、またはオフライン Web アプリをリリースすると、ユーザーはデータベースのローカル レプリカで作業し、オンラインに戻ったらサーバー上の「公式」データベースと同期できます。一部のアプリでは、人々があらゆる状況でアプリケーションを使用することを期待しているため、これは必須の機能になりつつあります.

于 2011-03-27T12:20:51.983 に答える
0

私は私の学士論文で読み取りアクセスのいくつかの例をまとめました。ここでサンプルコードを見つけることができます:https ://github.com/Goltergaul/bachelorthesis2 --- todolist-couchapp

于 2012-09-24T08:23:37.880 に答える