何时在MongoDB中使用map reduce over Aggregation Pipeline?

时间:2015-05-22 08:19:49

标签: mongodb mapreduce aggregation-framework

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

  

注:

     

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

我对此并不了解。

  • 使用map-reduce over aggregation管道的用例有哪些?
  • map-reduce提供了哪些灵活性?
  • 表现有多少差价?

1 个答案:

答案 0 :(得分:17)

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

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

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

因此,简而言之,我会说用例是

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