Map-Reduce Concurrency

The map-reduce operation is composed of many tasks, including reads from the input collection, executions of the map function, executions of the reduce function, writes to a temporary collection during processing, and writes to the output collection.

During the operation, map-reduce takes the following locks:

  • The read phase takes a read lock. It yields every 100 documents.

  • The insert into the temporary collection takes a write lock for a single write.

  • If the output collection does not exist, the creation of the output collection takes a write lock.

  • If the output collection exists, then the output actions (i.e. merge , replace , reduce ) take a write lock. This write lock is global , and blocks all operations on the mongod instance.

Note

The final write lock during post-processing makes the results appear atomically. However, output actions merge and reduce may take minutes to process. For the merge and reduce , the nonAtomic flag is available, which releases the lock between writing each output document. See the db.collection.mapReduce() reference for more information.