Existe-t-il une documentation technique décrivant le fonctionnement de la réplication entre deux Couches?
Quel est l’aperçu de base de la réplication CouchDB? Quelles sont les caractéristiques notables à ce sujet?
Malheureusement, il n’y a pas de documentation détaillée décrivant le protocole de réplication. Il n’y a que l’implémentation de référence intégrée à CouchDB, et la réécriture de Filipe Manana qui deviendra probablement la nouvelle implémentation dans le futur.
Cependant, c’est l’idée générale:
Si vous connaissez Git, vous savez comment fonctionne la réplication Couch. La réplication est très similaire à la poussée ou à l’extraction avec des gestionnaires de sources dissortingbuées tels que Git.
La réplication CouchDB ne possède pas son propre protocole. Un réplicateur se connecte simplement à deux bases de données en tant que client, puis lit à partir de l’une et écrit sur l’autre. La réplication poussée lit les données locales et met à jour la firebase database distante. tirer réplication est l’inverse.
L’algorithme de réplication est sortingvial, sans intérêt. Un singe entraîné pouvait le concevoir. C’est simple parce que l’intelligence est le modèle de données, qui présente ces caractéristiques utiles:
JOIN
ou une transaction, mais c’est génial si vous voulez écrire un réplicateur. Il suffit de comprendre comment répliquer un enregistrement, puis de le répéter pour chaque enregistrement. En plus des données d’application ( {"name": "Jason", "awesome": true}
), chaque enregistrement stocke la chronologie évolutive de tous les ID de révision précédents menant à lui-même.
Git n’est pas vraiment une liste linéaire. Il a des fourchettes, quand un parent a plusieurs enfants. CouchDB a ça aussi.
Exercice : comparer deux enregistrements différents, A et B. L’ID de révision de A n’apparaît pas dans le calendrier de B; cependant, un ID de révision, C, se trouve dans le scénario de A et de B. Ainsi, A n’a pas évolué de B. B n’a pas évolué de A. Mais plutôt, A et B ont un ancêtre commun C. Dans Git, c’est un “fork”. Dans CouchDB, c’est un “conflit”.
Dans Git, si les deux enfants continuent à développer leur calendrier de manière indépendante, c’est cool. Forks soutient totalement cela.
Git a aussi des fusions, quand un enfant a plusieurs parents. CouchDB a en quelque sorte cela aussi.
git merge
. Au moins une phrase de cet article (peut-être celle-ci) est complète.
Merci Jason pour l’excellent aperçu! Jens Alfke, qui travaille sur TouchDB et sa réplication pour Couchbase, a (officieusement) décrit l’algorithme de réplication CouchDB lui-même si les détails techniques sur le fonctionnement d’un protocole de réplicateur CouchDB «standard» vous intéressent.
Pour résumer les étapes qu’il a décrites:
_changes
depuis ce point revs_diff
sur un lot de modifications pour voir celles qui sont nécessaires sur la cible bulk_docs
à bulk_docs
pour les optimiser et pour stocker les documents différemment de la gestion MVCC de niveau supérieur habituelle sur PUT
. J’ai passé sous silence de nombreux détails ici et je recommande également de lire l’explication originale.
La documentation de CouchDB v2.0.0 couvre l’algorithme de réplication beaucoup plus largement. Ils ont des diagrammes, des exemples de réponses intermédiaires et des exemples d’erreurs. Ils utilisent le langage “MUST”, “SHALL”, etc. des RFC IETF.
Les spécificités de 2.0.0 (toujours inédites en janvier 2016) sont un peu différentes de 1.x, mais les bases sont toujours décrites dans @natevw .
À Apache CouchDB Conf 2013 , Benjamin Young a introduit replication.io dans sa réplication, FTW! parler . Il s’agit d’un effort continu pour définir et, à terme, pour tester les spécifications de la réplication maître-maître basée sur HTTP.
il est également documenté ici: http://www.dataprotocols.org/en/latest/couchdb_replication.html , eh bien, en quelque sorte.