【问题标题】:When to use map reduce over Aggregation Pipeline in MongoDB?何时在 MongoDB 中使用 map reduce 而不是聚合管道?
【发布时间】:2015-08-04 04:21:33
【问题描述】:

在查看 documentation 的 map-reduce 时,我发现:

注意:

对于大多数聚合操作,聚合管道提供 更好的性能和更连贯的界面。但是,map-reduce 操作提供了一些目前在 聚合管道。

我不是很明白。

  • 在聚合管道上使用 map-reduce 的用例有哪些?
  • map-reduce 提供了哪些灵活性?
  • 性能有多少增量?

【问题讨论】:

    标签: mongodb mapreduce aggregation-framework


    【解决方案1】:

    一方面,MongoDB 中的 Map/Reduce 不是为即席查询而设计的,M/R 的开销很大。由于这种开销,即使是对小型数据集进行非常简单的 M/R 操作也可能需要数百毫秒。

    在实践中我不能说 M/R 与聚合框架在大型数据集上的性能相比,但理论上,大型分片数据库上的 M/R 操作应该更快,因为分片可以运行操作大部分是并行的。

    至于灵活性,由于 M/R 实际上运行 javascript 方法,因此您可以使用该语言的全部功能。例如,假设您想按字段值的余弦对一些数据进行分组。由于聚合框架中既没有 $cos 运算符,也没有从连续数字构建离散桶的有意义的方法(类似于 $truncate),因此聚合框架在这种情况下无济于事。

    所以,简而言之,我会说用例是

    • 将 M/R 的结果保存在单独的集合中并不时更新(使用 out 参数并合并结果)
    • 对大型分片数据集的复杂查询
    • 查询过于复杂以至于您无法使用聚合框架。我会说这是数据结构设计缺陷的一个相当肯定的迹象,但原则上,它可以提供帮助

    【讨论】:

      猜你喜欢
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-04
      • 2019-04-07
      • 1970-01-01
      相关资源
      最近更新 更多