Как MongoDB занимается параллельными обновлениями?

Я начал использовать MongoDB на работе настолько хорошо. Мне было интересно, как MongoDB занимается параллельными обновлениями? Я читал, что в MongoDB нет функции блокировки, поэтому мне было интересно, какая общая практика имеет дело с этим.

Спасибо.

Ответ 1

MongoDB использовал блокировку записи процесса, чтобы гарантировать, что за один раз может быть выполнена только одна операция записи (обновление/вставка/удаление). Поэтому он автоматически решает проблемы concurrency, так как запись concurrency просто не разрешена.

Если 4 потока пытаются выполнить операцию обновления, один из них возьмет блокировку записи, выполнит обновление и освободит блокировку. После этого один из оставшихся 3 захватит блокировку, выполнит ее обновление и т.д.

Concurrency только вступает в игру, если ваша операция не может быть завернута в одну операцию записи. Обратите внимание, что для наиболее распространенного usecase (найти документ, обновить его и получить новую версию атомарно) MongoDB предлагает команду "findAndModify", которая делает именно это: http://www.mongodb.org/display/DOCS/findAndModify+Command

UPDATE: теперь блокировка более зернистая.

Ответ 2

Используйте действия модификатора:

$inc $set $unset $push $pushAll $addToSet $pop $pull $pullAll $rename $bit

все они являются атомарными.