Работа с конфликтами, вызванными репликацией в BigCouch
Страница wiki couchDB Replication and Conflicts предлагает использовать _bulk_docs
с all_or_nothing=true
для принудительной записи новых версий документов, даже если это вводит конфликты на запись, но затем разрешаем сразу после последующих чтений. Я реализовал это, и, по-видимому, он работает нормально.
Но BigCouch не поддерживает семантику all_or_nothing
, поэтому записи в объемные документы могут возвращать 409 результатов конфликтов. Какова наилучшая практика для реализации аналогичного разрешения конфликтов на уровне приложений для конфликтов, возникающих при репликации в BigCouch? Должен ли я искать разрешение конфликтов времени записи?
Ответы
Ответ 1
Получить номер версии документа, который будет обновляться, если есть конфликт во вложении и рекурсивно вызывать в случае конфликта,
$url = "http://couchdb/DATABASE/DOCID/ATTACHMENTNAME?rev=$rev";
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_PUT, true );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_exec( $ch );