Couchbase может быть настроен для обработки обновления в виде атомной транзакции или нет. В Couchbase land необходимо учитывать два метода: Couchbase хранит документы: память и диск.
Я подозреваю, что ваш вопрос направлен в контексте того, как Couchbase сохраняет документы на диске после обновления.
После того, как документ был мутирован, Couchbase делает новый мутированный документ доступным в памяти первым, чтобы другие читатели могли видеть, а затем, в конце концов, сохраняли его на диске. Между прочим, последнее также может быть настроено как атомарное.
Каждая мутация документа генерирует новое значение CAS, которое должно быть связано с обновленным документом. Подумайте о двух значениях CAS в качестве уникальных идентификаторов для двух версий вашего документа: предшествующего и текущего. Оба сохраняются как два отдельных документа в памяти и на диске.
Поэтому вместо того, чтобы переписывать блок диска, хранящий более раннюю версию документа, Couchbase сохранит новый документ на диске как полностью отдельный документ. Кстати, Couchbase выбирает местоположение на диске, определяя, где были написаны последние из любых других документов, и записывая новый документ на диск сразу после него.
Уборка мусора или уплотнение, так как Couchbase ссылается на него, в конечном итоге останавливается и ищет старые документы, срок действия которых истек, и выталкивать их, сохраняя только самые последние версии. Кроме того, процесс уплотнения заполнит пробелы на диске, пытаясь сохранить непрерывный охват хранилища.
Все они конфигурируются, чтобы быть более атомарными, но архитектура действительно сияет, когда у вас есть прецедент, в результате которого в конечном итоге будет приемлемым.
Вот ссылка о том, как обрабатывать одновременные мутации документов на уровне приложений, но делает очень хорошую работу, объясняя, как работает значение CAS: https://developer.couchbase.com/documentation/server/current/sdk/concurrent-mutations-cluster.html
Спасибо за ваш подробный ответ. Я уже знал о CAS, но я не был уверен в процессе добавления. Спасибо за ваше объяснение. –