Map-Reduce Concurrency
Map 减少操作由许多任务组成,包括从 Importing 集合中读取,执行map
函数,执行reduce
函数,在处理期间写入临时集合以及写入输出集合。
在操作期间,map-reduce 采取以下锁定:
-
读取阶段需要读取锁定。每 100 份文档产生一次。
-
插入到临时集合中将对单个写入执行写锁定。
-
如果输出集合不存在,则输出集合的创建将具有写锁定。
-
如果存在输出集合,则输出操作(即
merge
,replace
,reduce
)将具有写锁定。此写锁定为* global *,并阻止mongod实例上的所有操作。
Note
后处理期间的最终写锁定使结果自动显示。但是,输出动作merge
和reduce
可能要花几分钟才能处理。对于merge
和reduce
,nonAtomic
标志可用,从而释放了写入每个输出文档之间的锁定。有关更多信息,请参见db.collection.mapReduce()参考。