CouchDb и запись данных

Насколько я понимаю, CouchDb никогда не перезаписывает запись, а вместо этого создает новый документ с новым _rev. Что происходит в этом сценарии?

  1. Пользователь А читает документ
  2. Пользователь Б читает тот же документ
  3. Пользователь A обновляет документ
  4. Пользователь Б обновляет документ

Не теряются ли изменения пользователя А в этом сценарии?


person John Livermore    schedule 17.05.2011    source источник


Ответы (1)


Нет, вместо этого пользователь B получит ошибку 409, так как обороты больше не будут совпадать. Чтобы пользователь B зафиксировал свой документ, ему потребуется повторно загрузить документ, чтобы он мог получить последнюю версию документа.

Это называется оптимистической блокировкой и предназначено специально для предотвращения проблемы, которую вы видите.

Ничто не мешает Пользователю Б растоптать документ Пользователя А, но теперь они более осознанно относятся к этому, поскольку им приходится повторно загружать документ и использовать новый параметр _rev.

person Will Hartung    schedule 17.05.2011
comment
Можно разрешить изменение пользователя B, чтобы по крайней мере клиент B мог успешно сохранить обновление за один круговой обход. Однако это вызовет конфликт в CouchDB, который должно разрешить какое-то клиентское программное обеспечение. Но, как говорит Уилл, в большинстве ситуаций люди терпят неудачу и позволяют Б (или программе Б) повторно выполнить запрос. - person JasonSmith; 18.05.2011