2012-01-01 2 views
2

Какой тип блокировки предлагает findAndModify()? Является ли только блокировка записи или чтение/запись? Предотвращает ли одновременное обновление одной и той же записи?Действительно ли findAndModify блокирует документ для предотвращения конфликтов обновления?

ответ

4

MongoDB имеет глобальную блокировку записи (для каждого экземпляра), которая сериализует все обновления по всем данным на сервере (хотя на разных серверах в оштукатуренном кластере каждый будет иметь свои собственные независимые блокировки). Это означает, что в любой момент времени в любом документе происходит только одно обновление и, следовательно, только одно обновление для любого данного документа.

findAndModify не делает ничего другого в этом отношении, чем обычный update - он просто возвращает документ вам.

+0

Я думаю, что разумно интерпретировать явные претензии атомарности в документах как гарантию будущей семантики (контракт на их будущую пользовательскую базу), в то время как (слухи) комментарии о существующей семантике обновления или других операциях, которые не имеют таких обещаний, должны рассматриваться как детали реализации, на которые НЕ следует полагаться в коде качества. –

+0

Я не совсем уверен, какая часть моего ответа - если таковая имеется, - это касается. Но семантика атомного обновления гарантируется как для 'findAndModify', так и для обычного' update'. Реализация (в настоящее время глобальная блокировка записи) может измениться, но семантика останется. – dcrosta

Смежные вопросы