2016-11-03 3 views
2

Я пытаюсь перехода между состоянием объекта следующим образом:Как атомное являются операции mongoengine в

User.objects(id=user_id, state=STATE_WAITING).update_one(set__state=STATE_FINISHED) 

вопрос есть, может ли быть ситуация, когда два процесса сделает же операцию асинхронно и добиться успеха?

Если это так, может ли эта операция быть атомарной, поэтому следующий процесс, который попытается обновить пользователя (в то же время асинхронно), потерпит неудачу, потому что статус будет уже «завершен»?

ответ

2

При записи на одном документе операция является атомарной.

In MongoDB, a write operation is atomic on the level of a single document, even if the operation modifies multiple embedded documents within a single document.

При записи на нескольких документах, не является атомарным.

Кроме того, транзакция с несколькими документами может быть смоделирована с использованием двухфазного фиксации, подробности here.

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