文档菜单
文档首页
/
MongoDB 手册
/ /

分片集合与Map-Reduce

本页内容

  • 分片集合作为输入
  • 分片集合作为输出

注意

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

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

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

Map-reduce支持对分片集合的操作,无论是作为输入还是作为输出。本节描述了针对分片集合的特定于 mapReduce 的行为。

当使用分片集合作为map-reduce操作的输入时,mongos 将自动并行将map-reduce任务分发到每个分片。不需要特殊选项。mongos 将等待所有分片上的任务完成。

如果 out 字段对于 mapReduce 的值是 sharded,MongoDB 将使用 _id 字段作为分片键来分片输出集合。

输出到分片集合

  • 如果输出集合不存在,首先创建分片集合。

  • 如果输出集合已存在但不是分片的,map-reduce 将失败。

  • 对于新的或空的分片集合,MongoDB 使用 map-reduce 操作的第一阶段的结果来创建初始的 数据块,并将这些数据块分布在各个分片之间。

  • mongos 将 map-reduce 后处理作业并行发送到拥有数据块的所有分片。在后处理期间,每个分片将从其他分片拉取其数据块的结果,运行最终的 reduce/finalize,并将结果写入本地输出集合。

注意

  • 在后续的 map-reduce 作业中,MongoDB 根据需要拆分数据块。

  • 为了防止并发问题,在后处理期间自动防止输出集合的数据块平衡。

返回

Map-Reduce