Performance 减少值对的CouchDB性能问题

Performance 减少值对的CouchDB性能问题,performance,mapreduce,couchdb,Performance,Mapreduce,Couchdb,使用CouchDB,我试图计算一组自动测试结果的“最后一次通过”和“最后一次失败”时间,但性能非常差 我有5000条以下表格记录的数据库: { "completionTime": "2013-06-06T17:28:09.384Z", "environment": "ENV1", "passed": true, "duration": 59142, "summary": "", "origin": { "rowId": "1", "

使用CouchDB,我试图计算一组自动测试结果的“最后一次通过”和“最后一次失败”时间,但性能非常差

我有5000条以下表格记录的数据库:

{
   "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];
}
函数(键、值、返回值){
var latestPass=null;
var latestFail=null;
对于(变量i=0;i
当查询此视图的所有结果(大约750个)时,需要10-50秒,这比我预期的要慢得多


我是否明显做错了什么?

根据我有限的CouchDB视图调优经验,我发现在Erlang中编写视图可以显著提高性能

从这个开始:

然后用Erlang编写视图(一些示例):


要使Erlang视图的语法正确,这有点棘手,但尝试起来很有趣,与Javascript视图相比,我看到性能提高了50%多一点。

我切换到MongoDB,相同的查询在数百毫秒内运行,而不是几十秒。

谢谢(如果我有代表,我会投赞成票),虽然我没有尝试过,但我真的需要将我的查询速度提高100倍。