0

map関数とreduce関数の両方が定義されているビューがあり、このビューではreducedクエリとnon-reducedクエリの両方が役立ちます(ここでは非reducedクエリが最も必要です)。

少量の10,000ドキュメントのインデックスを再作成する場合、CPUがトップになり、完全なインデックスを作成するには何年もかかります。reduce関数を削除(または単純化)すると問題が解決し、couchjsログで、reduce/rereduce呼び出しがすべてのリソースを消費することがわかります。

問題は、ビューが「reduce = false」オプションで照会された場合でも、couchdbがreduce /rereduceを呼び出してインデックスを構築するのはなぜですか?これらの値を事前計算として使用することはできないと思いますが、何が間違っているのでしょうか。

4

1 に答える 1

0

CouchDB Map / Reduceインデックスは常に完全に事前計算され、ディスクにキャッシュされます。クエリはディスク上のインデックスから満たされます。

これは、特にリデュース関数でうまく機能するものにいくつかの制約があることを意味します。一般的な考え方は、reduce関数はサイズが一定の値/構造を出力する必要があるということです。つまり、実際にデータを削減せずにデータを蓄積するreduce()関数がある場合はお勧めできません(たとえば、マップフェーズのキーまたは値を配列に連結してからその配列を返すなど)。一般に、CouchDBには、query_server_config.reduce_limit不正なreduce関数を記述しないようにするためにtrueに設定されたオプションが構成されています。

于 2013-02-11T10:12:08.253 に答える