Docs 菜单

Map-Reduce 并发性

注意

聚合管道作为 Map-Reduce 的替代方案

从MongoDB 5.0开始, map-reduce已弃用:

  • 您应该使用聚合管道,而不是 map-reduce。聚合管道提供比 map-reduce 更好的性能和可用性。

  • 您可以使用聚合管道阶段(例如 $group$merge 等)重写 map-reduce 操作。

  • 对于需要自定义功能的 map-reduce 操作,可以使用 $accumulator$function 聚合操作符。可以使用这些操作符在 JavaScript 中定义自定义聚合表达式。

有关 map-reduce 的聚合管道替代方案的示例,请参阅:

map-reduce 操作由许多任务组成,包括读取输入集合、执行map函数、执行reduce函数、在处理期间写入临时集合以及写入输出集合。

操作期间,map-reduce 会使用以下锁:

  • 读取阶段采用读锁(read lock)。它每 100 个文档生成一次。

  • 插入到临时collection中的操作对单次写入采用写锁(write lock)。

  • 如果输出collection不存在,则在创建输出collection时将采用写锁(write lock)。

  • 如果输出collection存在,则输出操作(即 mergereplacereduce ) 采用写锁(write lock)。此写锁(write lock)是全局性的,会阻止mongod实例上的所有操作。