0

私はreduceメソッドを持っていて、それがどれくらいかかるかを計りたいので、基本的に次のようなことをしたかったのです:

function(key, values, rereduce) {
  var start_time = new Date();

  // my calcs here.

  var totallength = 0; // this is wrong... any global variables or closure?
  var totaltime = 0; // this is wrong... any global variables or closure?

  time_calc_took = new Date() - start_time;
  totallength += values.length;
  totaltime += time_calc_took;
  return([totallength, totaltime, someother_results]);
}

ただし、totallength と totaltime はグローバル変数ではないため、ビューのパフォーマンスを実際に測定することはできません。異なる行数で実行するのにかかる時間を知りたいです。

4

1 に答える 1

1
  1. 関数内にグローバル変数はありません。ローカル変数しかありません。グローバル変数は、グローバル スコープ (関数の外) でのみ定義できます。ただし、couchbase では、reduce 関数以外で変数を定義することはできません。

  2. ビューのパフォーマンスを測定したい場合、この関数は複数回呼び出すことができるため、コードの一部を測定するだけなので、コードは完全に間違っています。reduce 関数については、couchbase のドキュメントを参照してください (以下のリンクを参照)。

  3. 最後に、作成したコードは、ビューのインデックス作成のパフォーマンスしか測定できないため、ビューのパフォーマンスを測定しません。また、ほとんどの場合、インデックス作成プロセスはバックグラウンドで実行され、ビューのパフォーマンスには影響しないため、ビューのパフォーマンスはインデックス作成のパフォーマンスと同じではありません。

ビューとその仕組みについては、このドキュメントを読むことをお勧めします。reduce 関数に関する段落にも注意してください。

UPD: グローバル変数は、reduce 関数のコンテキストでは存在できませんでした。view とその reduce 関数に関するドキュメントを注意深く読んだ場合、reduce 関数はクラスター内の異なるサーバーで複数回呼び出すことができることを理解する必要があります。したがって、クラスター内の複数のサーバーでグローバルになる変数を定義することはできません。返された変数のみを操作できます。また、reduce 関数で処理する必要があります。処理rereduceしない場合は、最新の reduce の rereduce の時間をカウントし、以前のすべての値を無視します。

ビューのパフォーマンスを測定するより良い方法は、負荷テストを生成し、ビューのインデックス作成プロセスの絶対時間ではなく、最大操作/秒で操作することです。インデックス作成速度を測定する必要がある場合はstale=false、結果を返す前にソファベースにインデックスを強制的に更新させるパラメーターを使用してビューにクエリを実行するため、そのクエリの時間は、結果のマッピングと削減にかかった時間を表します (つまり、curl または Web ブラウザーを使用することもできます)。 . しかし、実際のアプリケーションでは、stale=false.

reduce コードを調整するには、ブラウザでパフォーマンスを測定するか、nodejs で測定します。reduce 関数をコピーして、マップ データで呼び出すだけです。ブラウザでコードを最適化すると、コードは CB で高速になります。オンラインの jsvascript map-reduce エミュレーターを見つけることもできます。

于 2013-10-01T19:56:47.520 に答える