Как MongoDB справляется с одновременными обновлениями? - PullRequest
21 голосов
/ 09 августа 2011

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

Спасибо.

Ответы [ 2 ]

30 голосов
/ 09 августа 2011

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

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

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

ОБНОВЛЕНИЕ: блокировка в наши дни более детализирована.

6 голосов
/ 09 августа 2011

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

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

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

...