Есть ли техническая документация, описывающая, как работает репликация между двумя кушетками?
Каков основной обзор репликации CouchDB? Каковы некоторые примечательные характеристики?
Есть ли техническая документация, описывающая, как работает репликация между двумя кушетками?
Каков основной обзор репликации CouchDB? Каковы некоторые примечательные характеристики?
К сожалению, нет подробной документации, описывающей протокол репликации. В CouchDB есть только эталонная реализация, и Filipe Manana переписывает то же самое, что, вероятно, станет новым внедрением в будущем.
Однако, это общая идея:
Если вы знаете Git, то знаете, как работает репликация Couch. Репликация очень похожа на нажатие или вытягивание с помощью распределенных исходных менеджеров, таких как Git.
Репликация CouchDB не имеет собственного протокола. Репликатор просто подключается к двум БД в качестве клиента, затем читает с одного и записывает в другой. Репликация Push - это чтение локальных данных и обновление удаленного БД; репликация тиража - это наоборот.
Алгоритм репликации тривиальный, неинтересный. Обученная обезьяна могла его спроектировать. Это просто, потому что умность - это модель данных, которая имеет эти полезные характеристики:
JOIN
или транзакцию, но это потрясающе, если вы хотите написать репликатор. Просто выясните, как копировать одну запись, а затем повторите это для каждой записи.В дополнение к данным приложения ({"name": "Jason", "awesome": true}
) каждая запись хранит эволюционную шкалу всех предыдущих идентификаторов ревизий, ведущих к себе.
Git на самом деле не является линейным списком. У него есть вилки, когда у одного родителя есть несколько детей. У CouchDB тоже есть.
Упражнение: Сравните две разные записи: A и B. Идентификатор версии не отображается на временной шкале B; однако, один идентификатор ревизии, C, находится как в временной шкале A, так и в B. Таким образом, A не эволюционировал из B. B не эволюционировал от A. Но скорее, A и B имеют общего предка C. В Git, это "вилка". В CouchDB это "конфликт".
В Git, если оба ребенка продолжат разрабатывать свои временные рамки самостоятельно, это круто. Форки полностью поддерживают это.
Git также имеет слияния, когда у одного ребенка есть несколько родителей. У CouchDB тоже есть это.
git merge
.По крайней мере одно предложение в этой записи (возможно, это одно) является полным BS.
Спасибо Джейсону за отличный обзор! Дженс Альфке, который работает над TouchDB и его репликацией для Couchbase, (неофициально) описал алгоритм репликации CouchDB, если вы заинтересованы в технические подробности того, как работает "стандартный" репликатор CouchDB.
Подводя итог описанным выше шагам:
_changes
с этой точкиrevs_diff
в пакете изменений, чтобы увидеть, какие из них необходимы для целевогоbulk_docs
как для оптимизации, так и для хранения документов иначе, чем обычная обработка MVCC на более высоком уровне, на PUT
.Я подробно рассмотрел многие подробности и рекомендую прочитать также оригинальное объяснение.
Документация для CouchDB v2.0.0 более подробно описывает алгоритм репликации. У них есть диаграммы, примеры промежуточных ответов и примеры ошибок. Они используют язык "ДОЛЖЕН", "ДОЛЖЕН" и т.д. IETF RFC.
Спецификации для 2.0.0 (еще не выпущенные по состоянию на январь 2016 года) немного отличаются от 1.x, но основы все еще описаны в @natevw.
В Apache CouchDB Conf 2013, Бенджамин Янг представил replication.io в Репликация, FTW! говорить. Это постоянная попытка определить и, наконец, mint, спецификацию для репликации master-master на основе HTTP.
он также описан здесь: http://www.dataprotocols.org/en/latest/couchdb_replication.html, ну, вроде.