Я начал использовать MongoDB на работе, пока все хорошо. Мне было интересно, как MongoDB справляется с одновременными обновлениями? Я читал, что в MongoDB нет функции блокировки, поэтому мне было интересно, как с этим справиться.
Спасибо.
Я начал использовать MongoDB на работе, пока все хорошо. Мне было интересно, как MongoDB справляется с одновременными обновлениями? Я читал, что в MongoDB нет функции блокировки, поэтому мне было интересно, как с этим справиться.
Спасибо.
MongoDB использовала блокировку записи на уровне процесса, чтобы гарантировать, что только одна операция записи (обновление/вставка/удаление) может выполняться одновременно. Таким образом, он автоматически решает проблемы параллелизма, поскольку параллелизм записи просто не разрешен.
Если 4 потока попытаются выполнить операцию обновления, один из них возьмет блокировку на запись, выполнит обновление и снимет блокировку. После этого один из оставшихся 3-х захватит блокировку, сделает ее обновление и т.д.
Параллелизм вступает в игру только в том случае, если ваша операция не может быть заключена в одну операцию записи. Обратите внимание, что для наиболее распространенного варианта использования (найти документ, обновить его и получить новую версию атомарно) MongoDB предлагает команду «findAndModify», которая делает именно это: http://www.mongodb.org/display/DOCS/findAndModify+Command
ОБНОВЛЕНИЕ: в наши дни блокировка стала более детальной.
Используйте операции-модификаторы:
$inc $set $unset $push $pushAll $addToSet $pop $pull $pullAll $rename $bit
все они атомные.