2012-10-31 41 views
-1

下面是我在做什么:地图减少服用很长一段时间,以减少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()

我有这个索引tscookie,我有三个分片设置与三个副本集。我的集合在三个节点上分割,每个分片都是一个包含3个成员的副本集。

为什么这需要这么久?对于prod,我打算将ts设置为一个范围(也许是最后一个小时),所以它会有许多比26更多的匹配文档。

+0

downvote?我的问题有什么问题? – Landon

回答

1

mapReduce调用参数应该看起来像这样(而不是所有选项在一个对象中):

db.campaign_raw_data_459_imp.mapReduce(map, reduce, 
    {out: { replace : "garbage"}, query: {ts:1350585328}}) 
+0

根据文档,我使用的是pymongo驱动程序,您不会将它们全部组合在一起以用于pymongo http://api.mongodb.org/python/2.0/examples/map_reduce.html#advanced-map-reduce – Landon

+0

@Landon好的,但不是你使用mongo shell的示例代码?一切看起来都与pymongo有点不同。 – JohnnyHK

+0

是的,我的示例代码是在mongo shell中。我在那里制作我的代码,然后将其复制到我的驱动程序。是的,技术上不同的驱动程序执行的方式不同,但我遇到完全相同的时间等待pymongo驱动程序 – Landon