Map-Reduce 和分片集合

在本页面

Map-reduce 支持对分片集合的操作,既可以作为 Importing,也可以作为输出。本部分描述特定于分片集合的mapReduce的行为。

分片集合作为 Importing

当使用分片集合作为 map-reduce 操作的 Importing 时,mongos会自动将 map-reduce 作业并行分派给每个分片。无需特殊选择。 mongos将 await 所有分片上的作业完成。

分片集合作为输出

如果mapReduceout字段具有sharded值,则 MongoDB 使用_id字段作为分片键对输出集合进行分片。

要输出到分片集合:

  • 如果输出集合不存在,则 MongoDB 会在_id字段上创建并分片该集合。

  • 从版本 3.6.6 开始,如果输出集合已存在且未分片,则 map-reduce 失败。

  • 对于新的或空的分片集合,MongoDB 使用 map-reduce 操作的第一阶段的结果来创建在分片之间分配的初始chunks

  • mongos并行地将 Map 减少后处理作业分配给拥有块的每个分片。在后处理期间,每个分片将从其他分片中提取其自身块的结果,运行最终的 reduce/finalize,然后本地写入输出集合。

Note

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

  • 在后处理期间,将自动防止输出集合的块平衡,以避免并发问题。