私はCouchApp(ミドルウェアなし)の最良のアプローチを決定しようとしています。私の考えと類似しているので、CouchDBにスタックオーバーフローページが保存されていると仮定しましょう。本質的に、それは一番上の実際の質問、答え、そしてコメットで構成されています。それらは基本的に3つの層です。
保存には2つの方法があります。データの適切なJSON表現を含む単一のドキュメント内にあるか、エントリの各部分を後でビューを介してそれらを組み合わせた個別のドキュメント内に保存します(これと同様:http ://www.cmlenz.net/archives/2007/ 10 / couchdb-joins)
さて、どちらのアプローチも問題ないかもしれませんが、私の現在の観点からは、どちらにも大きな欠点があります。ビジーなドキュメント(複数のユーザーによる多くの変更が予想されます)を署名エンティティとして保存すると、競合が発生します。ユーザーAが自分の変更をドキュメントに保存する場合、ユーザーBは更新の入力を終了すると、競合エラーを受け取ります。再試行する前にドキュメントを再ダウンロードすることで、ユーザーの知らないうちにこれを修正できると想像できます。
しかし、ドキュメントがかなり大きい場合はどうなりますか?特に、多くのユーザーが同時にドキュメントを更新するために再試行プロセスを複数回実行する必要がある場合は、保存プロセスにかなりの遅延が発生するため、時間の経過とともにかなり大きくなります。
私が見るもう一つの問題は編集です。すべてのユーザーが自分の投稿を編集できるようにする必要があります。現在、それらが1つのドキュメント内に格納されている場合、確実な認証ハンドラーを作成するのは難しいかもしれません。
では、複数のドキュメントのアプローチを見てみましょう。質問、回答、コメントはそれぞれのドキュメントに保存されます。利点:ドキュメントの実際の所有者のみが競合を引き起こす可能性がありますが、これはあまり頻繁には発生しません。全体のかなり小さな要素なので、再ダウンロードにはそれほど時間はかかりません。さらに、認証ルーチンは非常に簡単に実現できるはずです。
これが欠点です。単一のドキュメントは、クエリと表示が非常に簡単です。並べ替えられていないスニペットをたくさん配置するのは面倒なことのように思えます。なぜなら、実際のビューでは、アイテム全体を順序付けられた構造化された形式で含む100%すぐに使用できるJSONオブジェクトを表示できなかったからです。
実際の問題を伝えることができたと思います。私は、どの解決策が自分に適しているか、どの問題を克服しやすいかを判断しようとしています。最初のソリューションは、ストレージとクエリの点でよりきれいなソリューションであると思いますが、2番目のソリューションは、ビュー内のより優れたキー管理によって解決できるより実用的なソリューションです(私はまだキーの原則に完全には精通していません)。
よろしくお願いします:)