MongoDB {aggregation $ match} vs {find}速度

Owumaro:

我有一个包含数百万行的mongoDB集合,我正在尝试优化查询。我目前正在使用聚合框架来检索数据并根据需要对其进行分组。我典型的聚合查询类似于:$match > $group > $ group > $project

但是,我注意到最后一部分仅花费几毫秒,而开始是最慢的。

我尝试仅使用$ match过滤器执行查询,然后使用collection.find执行相同的查询。聚合查询大约需要80毫秒,而查找查询需要0或1毫秒。

我几乎在每个字段上都有索引,所以我想这不是问题。对可能出问题的任何想法吗?还是仅仅是聚合框架的“正常”缺陷?

我可以使用查找查询代替聚合查询,但是在请求之后我必须执行很多处理,并且可以使用$groupetc 快速完成此过程。因此,我宁愿保留聚合框架。

谢谢,

编辑:

这是我的标准:

{
    "action" : "click",
    "timestamp" : {
            "$gt" : ISODate("2015-01-01T00:00:00Z"),
            "$lt" : ISODate("2015-02-011T00:00:00Z")
    },
    "itemId" : "5"
}
我掌管:

的主要目的aggregation framework是简化对大量条目的查询,并生成少量对您有价值的结果。

如前所述,您也可以使用多个find查询,但是请记住,您不能使用find查询创建新字段另一方面,该$group阶段允许您定义新字段。

如果您想实现的功能,则aggregation framework很可能必须运行一个缩写find(或链接多个缩写),提取该信息,然后使用编程语言对其进行进一步操作。

aggregation pipeline似乎需要更长的时间,但至少你知道,你只需要考虑一个系统的性能- MongoDB的引擎。

而在处理find查询返回的数据时,您很可能必须使用一种编程语言来进一步处理数据,从而根据所选择的编程语言的复杂性而增加了复杂性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章