CouchDB では、map/reduce ビューを使用します。SQL では、作成するフィールド インデックスを明示的に指定する必要があります。CouchDB では、インデックスを作成するカスタム関数を作成するため、ニーズに合わせてより具体的にすることができます。名前、州、および国フィールドを使用した検索のような単純なことのインデックスが必要な場合、ビューは単なるマップ関数です。
function (doc) {
if (doc.name && doc.state && doc.country)
emit([doc.name, doc.state, doc.country], doc);
}
このビューを使用して検索するには、キーを検索します["my_name", "my_state", "my_country"]
。map の検索可能な結果は辞書順でソートされるため、出力された配列のプレフィックスである限り、名前、州、および国のサブセットを使用してクエリを実行するために使用できます ( and を使用name
せずに検索するstate
など)。country
原則として、ビューはクエリのいくつかの機能を備えたインデックスですが、SQL クエリほど柔軟ではありません。それらは一度実行されてディスクに保存され、新規/変更されたデータに対して増分的に計算されます。分散システム (CouchDB が設計されている) では非効率なことを行うのは難しいことに注意してください: より複雑な結合、インデックスなしでの検索... ただし、多くの場合、リレーショナル モデルのテーブルの人為的な分割は、構造化されている場合は必要ありません。ドキュメントが利用可能であり、一部の結合は必要ありません。
CouchDB と SQL の簡単な比較については、The Definitive Guide book のこの章と他の章、およびビューの詳細については公式wikiを参照してください。