0

CouchDB を使用して、一連の自動化されたテスト結果に対して「最終パス」と「最終失敗」時間を計算しようとすると、パフォーマンスが非常に低下します。

次の形式の〜5000レコードのDBがあります。

{
   "completionTime": "2013-06-06T17:28:09.384Z",
   "environment": "ENV1",
   "passed": true,
   "duration": 59142,
   "summary": "",
   "origin": {
       "rowId": "1",
       "worksheet": "Sheet1",
       "workbook": "book.xlsm"
   }
}

私はマップで定義されたビューを持っています:

function(run) {
  if (run.environment && run.origin && run.origin.rowId && run.origin.worksheet && run.origin.workbook && run.completionTime) {
    var key = [run.environment, run.origin.rowId, run.origin.worksheet, run.origin.workbook]
    var completionTime = Date.parse(run.completionTime)
    if (run.passed)
      emit(key, [completionTime, null] );
    else
      emit(key, [null, completionTime] );
  }
}

そして減らす:

function (key, values, rereduce) {
    var latestPass = null;
    var latestFail = null;
    for (var i = 0; i < values.length; i++) {
        latestPass = Math.max(values[i][0], latestPass);
        latestFail = Math.max(values[i][1], latestFail);
    }
    return [latestPass, latestFail];
}

このビューのすべての結果 (約 750 件) をクエリすると、10 ~ 50 秒かかり、予想よりも大幅に遅くなります。

私は明らかに間違ったことをしていますか?

4

2 に答える 2

0

MongoDB に切り替えたところ、同じクエリが数十秒ではなく数百ミリ秒で実行されました。

于 2013-07-01T14:07:06.503 に答える
0

CouchDB ビューのチューニングに関する限られた経験から、Erlang でビューを作成するとパフォーマンスが大幅に向上することがわかりました。

これから始めます: http://wiki.apache.org/couchdb/EnableErlangViews

次に、Erlang でビューを記述します (いくつかの例): Emit Tuples From Erlang Views In CouchDB

Erlang ビューの構文を正しくするのは少し難しいですが、試すのは楽しいです。Javascript ビューと比較してパフォーマンスが 50% 強向上することがわかりました。

于 2013-06-10T22:18:56.817 に答える