Mongo聚合缓慢

时间:2014-10-09 13:22:02

标签: mongodb mongodb-query

此查询可以更快:

db.foo.aggregate([
    {"$match": {"uid": {"$in": ["40001"]}}}, 
    {
        "$group": {
            "read": {"$sum": {"$cond": ["$read", 0, 1]}}, 
            "imp": {"$sum": {"$cond": ["$important", 1, 0]}}, 
            "_id": {"group_by": "$group_by", "ip_group": "$ip_group"}, 
            "date": {"$min": "$date_meta.dt"}, "count": {"$sum": 1}
        }
    },     
    {"$sort": {"start_time": -1}}
])

大约1mil。对于每个其他uid聚合的uid =“40001”(大约900000 - 90%的收集),它需要大约2,3秒的文档要快得多。因此看起来mongo大部分时间都在减少结果。 我厌倦了删除条件语句,但没有获得任何速度。所以看起来没有什么可以做,但我可能会忽略某点。 哦,我尝试使用索引,并删除$ sort选项但没有改进。

1 个答案:

答案 0 :(得分:1)

如果MongoDB必须将大量文档加载到内存中(900,000是一个很好的数量),则需要一些时间。改善这种情况的方法是......

  • 改善您的硬件
  • 使用分片来分配负载

如果该组显着减少文档数量,则Sharding将正常工作。这是因为初始组工作将在每个分片上完成,然后在MongoS上重新完成。