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 秒かかり、予想よりも大幅に遅くなります。
私は明らかに間違ったことをしていますか?