- Aggregation >
- Aggregation Concepts >
- Aggregation Mechanics >
- Map Reduce Concurrency
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 themongodinstance.
Changed in version 2.4: The V8 JavaScript engine, which became the default in 2.4, allows
multiple JavaScript operations to execute at the same time. Prior to
2.4, JavaScript code (i.e. map, reduce, finalize
functions) executed in a single thread.
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.