Работа с конфликтами, вызванными репликацией в 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 );