下面是我在做什么:地图减少服用很长一段时间,以减少26个记录
mongos> db.campaign_raw_data_459_imp.count()
21800002
mongos> db.campaign_raw_data_459_imp.find({ts:1350585328}).count()
26
mongos> map = function() { emit(this.cookie, 1);}
function() {
emit(this.cookie, 1);
}
mongos> reduce = function (key, values) {return 1;}
function (key, values) {
return 1;
}
mongos>
mongos> db.campaign_raw_data_459_imp.mapReduce(map, reduce, {out: { replace : "garbage"}}, query={ts:1350585328})
//This is hanging and taking forever, over 10 minutes now
有此集合中21米文件。而且,对于给定的时间戳(ts
= 1350585328),有26条记录。这里的目标是计算匹配记录中有多少个唯一的cookie。所以它应该找到所有的匹配文件,其中26个。然后将它们放入基于cookie的桶中,然后对桶进行计数。我会假定它会根据查询FIRST进行查找,然后用这些返回的值进行映射/缩小。如果是这样的话,收藏的大小根本不重要。它在眨眼之间做了第二行的count()
。
我有这个索引ts
和cookie
,我有三个分片设置与三个副本集。我的集合在三个节点上分割,每个分片都是一个包含3个成员的副本集。
为什么这需要这么久?对于prod,我打算将ts设置为一个范围(也许是最后一个小时),所以它会有许多比26更多的匹配文档。
downvote?我的问题有什么问题? – Landon