【问题标题】:Couchbase, reduction too large errorCouchbase,减少过大错误
【发布时间】:2014-09-08 09:06:19
【问题描述】:

在我的工作中,我使用的是 couchbase,但遇到了一些问题。从一些设备数据到 couchbase,在我调用聚合视图之后。此视图必须通过 2 个键聚合值:timestamp 和 deviceId。 在我尝试聚合超过 10k 的值之前,一切都很好。在这种情况下,我有减少错误

地图功能:

function(doc, meta)
{
  if (doc.type == "PeopleCountingIn"&& doc.undefined!=true)
  {
    emit(doc.id+"@"+doc.time, [doc.in, doc.out, doc.id, doc.time, meta.id]);
  }
}

减少功能:

function(key, values, rereduce)
{
  var result = 
      { 
        "id":0,
        "time":0,
        "in" : 0, 
        "out" : 0,
        "docs":[]
      };
  if (rereduce)
  {
    result.id=values[0].id;
    result.time = values[0].time;
    for (i = 0; i<values.length; i++)
    {
      result.in = result.in + values[i].in;
      result.out = result.out + values[i].out;
      for (j = 0; j < values[i].docs.length; j++)
      {
        result.docs.push(values[i].docs[j]);
      }        
    }
  }
  else
  {
    result.id = values[0][2];
    result.time = values[0][3];
    for(i = 0; i < values.length; i++)
    {
      result.docs.push(values[i][4]);
      result.in = result.in + values[i][0];
      result.out = result.out + values[i][1];
    }
  }
  return result;
}

文档样本:

{
   "id": "12292228@0",
   "time": 1401431340,
   "in": 0,
   "out": 0,
   "type": "PeopleCountingIn"
}

更新

输出文件:

{"rows":[
{"key":"12201774@0@1401144240","value":{"id":"12201774@0","time":1401144240,"in":0,"out":0,"docs":["12231774@0@1401546080@1792560127"]}},
{"key":"12201774@0@1401202080","value":{"id":"12201774@0","time":1401202080,"in":0,"out":0,"docs":["12201774@0@1401202080@1792560840"]}}
]
}

}

在“docs”数组长度超过 100 的情况下会发生错误。我认为在这种情况下可以使用 rereduce 函数。除了减少这个数组的计数之外,有什么方法可以解决这个错误吗?

【问题讨论】:

    标签: javascript web couchbase database nosql


    【解决方案1】:

    对 map 和 reduce 函数的输出有许多限制,以防止索引耗时过长和/或增长过大。

    这些正在添加到官方文档中,但同时引用跟踪文档更新的问题 (MB-11668):

    1) indexer_max_doc_size - 大于该值的文档将被 索引器。记录一条消息(带有文档 ID、其大小、存储桶名称、视图名称等) 当遇到这样的文件时。值 0 表示没有限制(就像以前一样 之前)。当前默认值为 1048576 字节 (1Mb)。

    2) max_kv_size_per_doc - 可以发出的 KV 对的最大总大小(字节) 单个视图的单个文档。超过此类限制时,将记录消息(使用 文档 ID、其大小、存储桶名称、视图名称等)。值 0 表示没有限制(比如 以前是这样)。当前默认值为 1048576 字节 (1Mb)

    编辑:此外,单个归约的大小限制为 64kB(reduce() 的输出。我建议您重新使用归约函数以在此限制内返回数据. 请参阅MB-7952 了解为什么会这样的技术讨论。

    【讨论】:

    • 错误消息显示:“减少量太大(66762 字节)”。它小于 1 Mb。所以我认为问题出在别的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    相关资源
    最近更新 更多