私は最近、空き時間に Couch DB でかなりの量の作業を行っており、それを使用することを本当に楽しんでいます。リレーショナル データベースを使用するよりもはるかに柔軟だと思いますが、欠点がないわけではありません。
大きな欠点の 1 つは、動的クエリ/ビュー生成の欠如です...そのため、SQL の場合のようにそのロジックをアプリケーション コードに入れることができないため、ビューの計画と正当化にかなりの量の作業を行う必要があります。 .
たとえば、次のような JSON ドキュメント テンプレートに基づいてログイン スキームを作成しました。
{
"_id": "blah",
"type": "user",
"name": "Bob",
"email": "bob@theaquarium.com",
"password": "blah",
}
重複したアカウントの作成を防ぐために、キーとして検索するユーザー名のリストを生成する非常に基本的なビューを作成しました。
emit(doc.name, null)
これは私にはかなり効率的であるように思えました。ドキュメントのリスト全体 (または各ドキュメントのフィールド数を減らすだけ) をドラッグするよりもはるかに優れていると思います。そのため、まったく同じことを行って、電子メール アドレスのリストを生成しました。
emit(doc.email, null)
この質問で私がどこに向かっているのか分かりますか?
リレーショナル データベース (SQL を使用) では、同じテーブルに対して 2 つのクエリを作成するだけです。この手法 (ビューを SQL クエリの結果と同一視する) は、何らかの形で類似しているのでしょうか?
次に、パフォーマンス/効率の問題があります...これらの 2 つのビューは本当に 1 つにすぎないのでしょうか? または、キーがあり値が関連付けられていない Couch DB ビューを使用することは効果的な方法ですか? 上記の例を考えると、これらのビューはどちらもログイン スキームの外で使用されます... ユーザー名のリストを生成する必要がある場合は、追加のオーバーヘッドなしでそれらを取得できます。
どう思いますか?