web-dev-qa-db-fra.com

Différences entre OT et CRDT

Quelqu'un peut-il m'expliquer simplement les principales différences entre la transformation opérationnelle et le CRDT?

Autant que je sache, les deux sont des algorithmes qui permettent aux données de converger sans conflit sur différents nœuds d'un système distribué.

Dans quel cas utiliseriez-vous quel algorithme? Pour autant que je comprends, OT est principalement utilisé pour le texte et CRDT est plus général et peut gérer des structures plus avancées non?

Le CRDT est-il plus puissant que l'OT?


Je pose cette question parce que j'essaie de voir comment implémenter un éditeur collaboratif pour les documents HTML, et je ne sais pas dans quelle direction regarder en premier. J'ai vu le projet ShareJS et leurs tentatives de prise en charge de la collaboration en texte enrichi sur le navigateur sur les éléments contenteditables. Nulle part dans ShareJS je ne vois aucune tentative d'utiliser CRDT pour cela.

Nous savons également que Google Docs utilise OT et cela fonctionne plutôt bien pour l'édition en temps réel de documents riches. Google a-t-il choisi d'utiliser OT parce que CRDT était pas très connu à l'époque ou serait-ce un bon choix aujourd'hui aussi?

Je suis également intéressé d'entendre parler d'autres cas d'utilisation, comme l'utilisation de ces algorithmes sur des bases de données. Riak semble utiliser CRDT. OT peut-il également être utilisé pour synchroniser les nœuds d'une base de données et être une alternative à Paxos/Zab/Raft?)

53
Sebastien Lorber

Les deux approches sont similaires en ce qu'elles offrent une cohérence éventuelle. La différence réside dans la façon dont ils le font. Une façon de voir les choses est la suivante:

  • OT le fait en modifiant les opérations . Les opérations sont envoyées sur le câble et les opérations simultanées sont transformées une fois qu'elles sont reçues.
  • Les CRDT le font en changeant l'état . Les opérations sont effectuées sur le CRDT local. Son état est envoyé sur le fil et est fusionné avec l'état d'une copie. Peu importe combien de fois ou dans quel ordre les fusions sont effectuées - toutes les copies convergent.

Vous avez raison, OT est principalement utilisé pour le texte et est antérieur aux CRDT mais recherche montre que:

de nombreux algorithmes OT dans la littérature ne satisfont pas aux propriétés de convergence contrairement à ce qui a été déclaré par leurs auteurs

En d'autres termes, la fusion CRDT est commutative tandis que les fonctions de transformation OT ne le sont pas toujours.

Extrait de article Wikipedia sur CRDT :

Les ergothérapeutes sont généralement complexes et non évolutifs

Il existe différents types de CRDT (ensembles, compteurs, ...) adaptés à différents types de problèmes. Il y en a qui sont conçus pour l'édition de texte. Par exemple, Treedoc - n type de données commutatif répliqué pour l'édition coopérative .

32
Andrejs