5

私はいくつかのサンプル コード (特に Couchbase Model Views デモ プロジェクトリンクから) を読み、map() 関数が非常に奇妙であることに気付きました。

function(doc, meta) {
   if (doc.type == "beer" && doc.name){
       emit(doc.name, null);
   }
}

出力関数の値が null であるのに、GetView("beers", "beer") の結果が完全に値を取得しているのはなぜですか?

私を助けてください !

4

1 に答える 1

7

通常、couchbase ではビューの結果セットがバックグラウンドで構築されます。たとえば、100 万個のドキュメントがそれぞれ 4Kb のサイズでビューがないとすると、ディスク上で最大 4Gb かかります。次のようなマップ関数でビューを作成すると

function(doc, meta) {
   emit(doc.name, doc);
}

その結果、ビューの結果は個別に保存されるため、ビューの結果用にディスク上で追加の 4Gb が必要になります。ほとんどの場合 ( param で view をクエリする場合Stale=Ok)、couchbase はその「プリコンパイル済み」レコード セットから結果を返しますが、couchbase は各クエリですべてのドキュメントをスキャンするわけではありません。

そのため、マップ関数で null を発行すると、ディスク領域の使用が防止され、インデックス作成プロセスの速度も向上します。

「GetView("beers", "beer") からの結果が完全に値を取得している」場合のソファベースの魔法に関する 2 番目の質問です。Couchbaseget(key)getMulti(keys)操作は非常に高速です。したがって、発行するビューにクエリを実行すると、nullだけnullsでなく、ドキュメント ID も返されます。次に、そのドキュメント ID の配列を手動で使用getMultiしてドキュメントの値を取得するか、一部の SDKIncludeDocsでは、同じことを自動的に行うクエリ パラメータが呼び出されます。

于 2013-08-23T05:41:34.633 に答える