【问题标题】:CouchDB performance issue reducing pair of valuesCouchDB 性能问题减少了一对值
【发布时间】:2013-06-10 16:01:57
【问题描述】:

使用 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];
}

查询此视图以获取所有结果(大约 750 个)时,需要 10-50 秒,这比我预期的要慢得多。

我做错了什么吗?

【问题讨论】:

    标签: performance mapreduce couchdb


    【解决方案1】:

    根据我在 CouchDB 视图调优方面的有限经验,我发现用 Erlang 编写视图可以显着提高性能。

    从这个开始:http://wiki.apache.org/couchdb/EnableErlangViews

    然后用 Erlang 写下你的观点(一些例子):Emit Tuples From Erlang Views In CouchDB

    让 Erlang 视图的语法正确有点棘手,但尝试起来很有趣,我发现与 Javascript 视图相比,性能提高了 50% 以上。

    【讨论】:

    • 谢谢(如果我有代表,我会投赞成票),虽然我没有尝试过——我真的需要将查询速度提高 100 倍。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      相关资源
      最近更新 更多