如何使用Map Reduce改善聚合处理时间?

时间:2014-11-14 14:26:19

标签: mongodb mapreduce query-optimization aggregation-framework

我正在努力提高聚合查询的速度。我的想法是使用Map Reduce创建一个新集合并在其上运行聚合。这会减少处理时间吗?有什么缺点?

1 个答案:

答案 0 :(得分:1)

是的,它可以工作。这是提高查询速度的常用模式。但MongoDB在这种情况下是特殊的,因为Map Reduce需要JavaScript评估,而聚合框架是本地实现的,因此aggregation is faster

我建议将概念与技术分开。在批处理作业中进行预计算仍然是一个好主意,但是您应该使用聚合框架而不是Map Reduce来进行预计算。

使用批处理作业的缺点是

  • 您只能查询批处理作业中的内容,以便在插入新数据和检索新数据之间存在延迟。
  • 如果您能够降低实时查询的复杂性,那只会更快。例如,新查询应该读取的文档少于没有批处理作业的文档。
  • 您的应用程序会消耗更多磁盘空间,因为您正在创建其他集合。
  • 增加了复杂性。因此,从实时聚合开始,只有当它成为性能问题时,才进行预先计算。

为了进一步改进延迟,您可以考虑实施Lambda architecture。它通过尽可能预先计算结果,将查询时间降至最低。

  

这种体系结构方法尝试通过使用批处理来提供全面和准确的预计算视图,同时使用实时流处理来提供动态视图,从而平衡延迟,吞吐量和容错。两个视图输出可以在演示之前连接。