ドキュメント指向の方法でアプリケーションにアプローチする方法を考える必要があります。RDBMSで問題をモデル化する方法を単純に複製しようとすると、失敗します。また、さまざまなトレードオフを行う必要があります。([ed:これがどのように議論に結びつくかはわかりませんが:] CouchDBの設計では、いつでも失敗する可能性のある多くのノードのアクティブなクラスターがあることを前提としていることを忘れないでください。それの下に?)
それについて考える1つの方法は、コンピューターがなく、紙の文書だけを持っていると想像することです。紙片を渡して効率的なビジネスプロセスをどのように作成しますか?どうすればボトルネックを回避できますか?何かがうまくいかない場合はどうなりますか?
考慮すべきもう1つの角度は、結果整合性です。結果整合性状態になりますが、一定期間は整合性がない場合があります。これはRDBMSの土地ではアナテマですが、現実の世界では非常に一般的です。正規の取引例は、銀行口座からの送金です。これは実際に現実の世界でどのように発生しますか?単一のアトミックトランザクションを通じて、または異なる銀行が相互にクレジットおよびデビット通知を発行することによってですか?小切手を書くとどうなりますか?
それでは、あなたの例を見てみましょう:
- 一意のインデックスを持ついくつかのフィールドを持つエンティティのCRUD。
これをCouchDBの用語で正しく理解している場合、名前付きの値がすべてのドキュメントで一意であることが保証されているドキュメントのコレクションが必要ですか?ドキュメントは異なるレプリカで作成される可能性があるため、このケースは一般的にサポートされていません。
したがって、実際の問題を調べて、それをモデル化できるかどうかを確認する必要があります。あなたは本当にそれらがユニークである必要がありますか?アプリケーションは同じ値の複数のドキュメントを処理できますか?一意の識別子を割り当てる必要がありますか?あなたはそれを決定論的に行うことができますか?これが必要な一般的なシナリオは、一意のシーケンシャル識別子が必要な場合です。これは、複製された環境で解決するのは困難です。実際、一意のIDが作成された時間に関して厳密に連続している必要がある場合、IDがすぐに必要な場合は不可能です。これらの制約の少なくとも1つを緩和する必要があります。
その投稿に対する最後のコメントは「とても便利です!ありがとう」だったので、ここに何を追加すればよいかわかりません。そこに概説されているアプローチから、まだ問題を引き起こしている何かが欠けていましたか?MrKurtの答えはかなり充実していると思い、競合を減らすための拡張機能を少し追加しました。