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

dev*_*v ツ 11 mapreduce mongodb aggregation-framework

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

注意:

对于大多数聚合操作,聚合管道提供更好的性能和更一致的接口.但是,map-reduce操作提供了一些在聚合管道中目前不可用的灵活性.

我对此并不了解.

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

mne*_*syn 17

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

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

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

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

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