Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB映射速度慢,内存不足_Mongodb_Mapreduce - Fatal编程技术网

MongoDB映射速度慢,内存不足

MongoDB映射速度慢,内存不足,mongodb,mapreduce,Mongodb,Mapreduce,我想使用MongoDB作为我正在构建的分析系统的后端。 使用MongoDB的主要优点之一是内置的MapReduce。 由于我们处于“中等数据”规模,我们还不需要Hadoop的开销 出于测试目的,我插入了5000万行类型 { user_id: xxxx, thing_id:xxxx, time: xxx } 在EC2大型实例上使用用户id上的索引。它是一个单实例mongodb(不是分片) 不到一秒钟 然而,在一个mapreduce中,我想计算一整夜的用户条目数,返回时出现内存不足错误,要么

我想使用MongoDB作为我正在构建的分析系统的后端。 使用MongoDB的主要优点之一是内置的MapReduce。 由于我们处于“中等数据”规模,我们还不需要Hadoop的开销

出于测试目的,我插入了5000万行类型

{
 user_id: xxxx,
 thing_id:xxxx,
 time: xxx
}
在EC2大型实例上使用用户id上的索引。它是一个单实例mongodb(不是分片)

不到一秒钟

然而,在一个mapreduce中,我想计算一整夜的用户条目数,返回时出现内存不足错误,要么我一定在做一些愚蠢的事情,要么mongo db不是我想要做的正确工具

我是Mongo DB的新手,非常感谢您的帮助。提前谢谢

错误:

Tue Aug  9 13:15:58 uncaught exception: map reduce failed:{
        "assertion" : "invoke failed: JS Error: out of memory nofile_b:2",
        "assertionCode" : 9004,
        "errmsg" : "db assertion failure",
        "ok" : 0
}
MAPREDUCE查询:

db.user_thing_like.mapReduce(map, reduce, {out: "tmp_test"}, {query: {"user_id" : 37104857 }});
映射并减少:

map = function () {
    for (var key in this) {
        emit(key.user_id, {count: 1});
    }
};

reduce = function (key, emits) {
    total = 0;
    for (var i in emits) {
        total += emits[i].count;
    }
    return {"count": total};
}
---更新---


我意识到mapreduce并没有按照我使用的语法考虑我的查询过滤器

下面是正确的mapreduce查询

db.runCommand({mapreduce: "user_thing_like", map: map, reduce: reduce, out: "tmp_test", query: {"user_id" : 37104857 }});
db.runCommand({mapreduce: "user_thing_like", map: map, reduce: reduce, out: "tmp_test", query: {"user_id" : 37104857 }});
另外,尝试从手册中指定
user\u id
作为MapReduce的排序键:

sort : <sorts the input objects using this key. Useful for optimization, like sorting by the emit key for fewer reduces>]
sort:]

我意识到mapreduce没有按照我使用的语法考虑我的查询过滤器

下面是正确的mapreduce查询

db.runCommand({mapreduce: "user_thing_like", map: map, reduce: reduce, out: "tmp_test", query: {"user_id" : 37104857 }});
db.runCommand({mapreduce: "user_thing_like", map: map, reduce: reduce, out: "tmp_test", query: {"user_id" : 37104857 }});

解决了的。runCommand({mapreduce:“user\u thing\u like”,map:map,reduce:reduce,out:“tmp\u test”,query:{“user\u id”:37104857}});此类评论应包含在原始问题中,而不是作为问题的答案提供。我把这些评论带到了问题中。