На вики-странице CouchDB Replication and Conflicts предлагается использовать _bulk_docs
с all_or_nothing=true
для принудительной записи новых версий документов, даже если это приводит к конфликтам при записи, но затем разрешается вскоре после последующих чтений. Я это реализовал, и концептуально это, кажется, работает нормально.
Но BigCouch не поддерживает семантику все_или_ничего
, поэтому запись в массовые документы может вернуть результат 409 Conflict. Какова наилучшая практика для реализации аналогичного разрешения конфликтов на уровне приложений для конфликтов, возникающих при репликации в BigCouch? Следует ли вместо этого обратить внимание на разрешение конфликтов во время записи?
Получение номера ревизии документа, который должен быть обновлен в случае возникновения конфликта при вложении, и рекурсивный вызов в случае возникновения конфликта,
$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 );