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 les plus remarquables de ce système ?
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 les plus remarquables de ce système ?
Malheureusement, il n'existe 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.
Toutefois, c'est l'idée générale :
Si vous connaissez Git, alors vous savez comment fonctionne la réplication de Couch. La réplication est très similaire au push ou pulling avec les gestionnaires de sources distribuées comme Git.
La réplication de 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 dans l'une et écrit dans l'autre. La réplication "push" consiste à lire les données locales et à mettre à jour la base de données distante ; la réplication "pull" est l'inverse.
L'algorithme de réplication est trivial, inintéressant. Un singe entraîné pourrait le concevoir. C'est simple parce que l'intelligence réside dans le modèle de données, qui possède ces caractéristiques utiles :
JOIN
ou une transaction, mais c'est génial si tu veux écrire un réplicateur. Il suffit de trouver comment répliquer un et ensuite répéter que pour chaque enregistrement.En plus des données de l'application ( {"name": "Jason", "awesome": true}
), chaque enregistrement stocke la chronologie de l'évolution de tous les ID de révision précédents jusqu'à lui-même.
Git n'est pas vraiment une liste linéaire. Il y a des bifurcations, quand un parent a plusieurs enfants. C'est aussi le cas de CouchDB.
Exercice : Comparez deux enregistrements différents, A et B. L'identifiant de révision de A n'apparaît pas dans la ligne de temps de B ; cependant, un identifiant de révision, C, est dans la ligne de temps de A. les deux La ligne de temps de A et B. Ainsi, A n'a pas évolué à partir de B. B n'a pas évolué à partir de A. Mais plutôt, A et B ont un ancêtre commun C. Dans Git, c'est un "fork". Dans CouchDB, il s'agit d'un "conflit".
A Git, si les deux enfants continuent à développer leur ligne de temps indépendamment, c'est cool. Les fourchettes soutiennent totalement cela.
Dans CouchDB, si les deux enfants continuent à développer leur ligne de temps indépendamment, c'est également cool. Les conflits soutiennent totalement cela.
Fait amusant 3 : Les "conflits" CouchDB ne correspondent pas aux "conflits" Git. Un conflit Couch est un historique de révision divergent, ce que Git appelle un "fork". C'est pour cette raison que la communauté CouchDB prononce le mot "conflit" avec un silencieux n : "cofliqué".
Git dispose également de fusions, lorsqu'un enfant a plusieurs parents. CouchDB en quelque sorte a aussi cela.
git merge
.Au moins une phrase de ce compte-rendu (peut-être celle-ci) est une pure connerie.
Merci Jason pour cet excellent aperçu ! Jens Alfke, qui travaille sur TouchDB et sa réplication pour Couchbase, a décrit (de manière non officielle) l'algorithme de réplication de CouchDB lui-même si vous êtes intéressé par les détails techniques du fonctionnement d'un protocole de réplicateur CouchDB "standard".
Pour résumer les étapes qu'il a décrites :
_changes
depuis ce moment-làrevs_diff
sur un lot de changements pour voir lesquels sont nécessaires sur la ciblebulk_docs
à la fois pour des raisons d'optimisation et pour stocker les docs différemment de ce que fait la gestion habituelle de plus haut niveau de MVCC sur PUT
.J'ai survolé de nombreux détails ici, et je vous recommande de lire également l'explication originale.
Sur Apache CouchDB Conf 2013 Benjamin Young introduit réplication.io dans son Réplication, FTW ! parler . Il s'agit d'un effort continu pour définir, et éventuellement monnayer, la spécification pour la réplication maître-maître basée sur HTTP.
Elle est également documentée ici : http://www.dataprotocols.org/en/latest/couchdb_replication.html enfin, en quelque sorte.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.