OPTIONS
翻译或纠错本页面

Map Reduce并发

map-reduce操作包含了几个任务,如从输入集合读取数据、执行 map 函数和 reduce 函数、处理过程中数据写入临时集合、最终的结果输出到集合。

在执行过程中,map-reduce会持有如下几个锁:

  • 读取数据阶段持有一个读锁,每次获取锁后读取100个文档。

  • 每一次写入临时集合时需要持有一个写锁。

  • 如果输出集合不存在,创建输出集合时需要持有一个写锁。

  • 如果输出集合已经存在,那么输出操作(例如 merge, replace, reduce)会持有一个写锁。这个写锁是 全局的,它会阻塞所有 mongod 实例中的操作。

在 2.4 版更改: MongoDB 2.4版本以后默认使用 V8 JavaScript引擎,允许同时执行多个JavaScript 操作。在2.4版本以前,JavaScript 代码(例如 map, reduce, finalize 方法)是运行在单个线程中。

注解

在对结果集的后期处理上,对锁的持有表现出原子性。需要注意的是,输出操作 mergereduce 操作可能需要花费几分钟时间。对于 mergereduce,有一个可选项 nonAtomic ,可以仅在写每个文档的时候持有锁,而不是整个操作执行期间。更多信息请查看 db.collection.mapReduce()

ON THIS PAGE