Что такое CAS в nosql и как его использовать?

Операции записи на Coucbahse принимают параметр cas (создание и установка). Кроме того, объект результата возврата любого запроса выборки без данных имеет свойство cas. Я немного погуглил и не смог найти хорошую концептуальную статью об этом.

Может ли кто-нибудь сказать мне, когда использовать CAS и как это сделать? Каким должен быть общий рабочий процесс использования CAS?

Я предполагаю, что нам нужно получить CAS для первой операции записи, а затем передать ее вместе со следующей записью. Также нам нужно обновить его с помощью результата CAS. Исправьте меня, если я ошибаюсь.

Ответ 1

CAS фактически означает check-and-set и является методом оптимистической блокировки. Значение или идентификатор CAS связаны с каждым документом, который обновляется всякий раз, когда изменяется документ - немного напоминает идентификатор ревизии. Цель состоит в том, что вместо пессимистической блокировки документа (и связанных с ним издержек на блокировку) вы просто читаете его значение CAS, а затем выполняете только запись, если соответствует CAS.

Общий прецедент:

  • Прочитайте существующий документ и получите его текущий CAS (get_with_cas)
  • Подготовьте новое значение для этого документа, предполагая, что никто другой не изменил документ (и, следовательно, вызвал изменение CAS).
  • Запишите документ с помощью операции check_and_set, указав значение CAS из (1).

Шаг 3 будет успешным (выполнить запись), если документ не изменится между (1) и (3) - то есть ни один другой пользователь не изменил его тем временем. Обычно, если (3) не работает, вы должны повторить всю последовательность (get_with_cas, modify, check_and_set).

Здесь содержится более подробное описание check-and-set в Руководстве разработчика Couchbase в разделе Check and Set (CAS).