• Aucun résultat trouvé

LogootSplit : CRDT pour blocs à taille variable

5.4 Bilan de la contribution

Notre algorithme résout le problème de la granularité fixe des CRDT posé en début de chapitre. Il élimine la possibilité d’avoir des données concurrentes entrelacées en insérant les données en blocs, et évite le problème des données dupliquées en permettant une scission des données en blocs plus petits.

Au delà de ces améliorations pour l’utilisateur, les performances théoriques de cet algorithme dépassent celles des autres algorithmes connus lorsque les blocs insérés sont de grande taille, et

le mécanisme d’append permet de créer avec plus de facilité de grands blocs.

Nous avons validé notre approche par l’implémentation d’un prototype, qui est utilisé pour prendre des notes par l’équipe de recherche lors de ses réunions. Des améliorations pour ce prototype sont en cours de développement.

Du point de vue algorithmique, l’apport de cet algorithme est une méthode de scission des éléments d’un CRDT, alors que jusqu’à présent seuls des CRDT avec des méthodes d’insertion et de suppression d’éléments étaient disponibles pour l’édition collaborative en temps réel.

Conclusion

L’édition collaborative en temps réel de documents texte se trouve actuellement à un stade bien développé. Plusieurs familles d’approches existent, et on peut trouver à l’intérieur de ces familles de nombreux algorithmes qui permettent d’éditer des structures de données différentes. Ce n’est toutefois pas un domaine totalement maîtrisé dans lequel on ne peut plus progresser de façon significative. Les algorithmes d’édition collaborative en temps réel ont été conçus pour réconcilier des structures de données divergentes de la manière acceptable la plus simple qu’il soit. L’étape suivante est de rehausser nos attentes et de réconcilier les données de manière plus complexe, mais aussi plus adaptée aux utilisateurs. Nous avons pour cela étudié les deux familles d’approches de la littérature, et proposé des améliorations pour chacune d’entre elles. Ces améliorations vont vers un meilleur respect des intentions des utilisateurs, alors que les approches actuelles ne se contentaient que de respecter l’intention des opérations utilisées par les algorithmes.

6.1 Contributions

6.1.1 Transformées pour document structuré

Dans un premier temps, nous avons analysé l’approche OT et déterminé que le respect des intentions des utilisateurs était lié majoritairement aux opérations utilisées par l’algorithme. Nous avons donc conçu un ensemble de sept opérations basé sur les intentions des utilisateurs, et une structure de données adaptée à ces opérations. Nous avons ensuite écrit les quarante-neuf transformées associées à cet ensemble, afin de le rendre utilisable par les algorithmes de contrôle OT.

Grâce à son ensemble d’opérations étendu, notre algorithme est capable de différencier plus finement les actions de l’utilisateur, et de proposer des résolutions de conflits plus adaptées aux réelles intentions des utilisateurs. Un autre avantage de notre approche est qu’elle génère moins d’opérations que les autres approches, ce qui a théoriquement des effets bénéfiques sur la rapidité d’intégration des éditions.

Nous avons montré le potentiel de notre algorithme en l’appliquant au contexte de l’édition collaborative en temps réel de wikis, à travers un transfert industriel pour l’entreprise XWiki. En plus de mieux respecter les intentions des utilisateurs, notre application permet une édition What You See Is What You Get des pages wiki, améliorant à nouveau le confort d’édition apporté aux utilisateurs.

6.1.2 CRDT à granularité variable

Dans un second temps, nous avons analysé l’approche CRDT pour l’édition de documents texte, plus récente que l’approche OT et plus simple dans ses mécanismes d’intégration. Elle se base sur des ensembles d’éléments ordonnés, que l’on peut ajouter ou retirer du modèle. Une faille commune à tous les CRDT étudiés était l’absence d’opération efficace de mise à jour des éléments, ce qui posait des problèmes de respect de l’intention des utilisateurs en cas de mise à jour en parallèle du même élément.

Nous avons conçu un CRDT qui élimine ce problème, en ajoutant une opération de scission d’un élément qui respecte les intentions des utilisateurs. Une mise à jour peut être réalisée en scindant un élément au niveau de la mise à jour, puis en insérant un nouvel élément entre les deux parties scindées. Cet algorithme permet de fonctionner avec des blocs de caractères de grande taille, ce qui réduit la quantité de métadonnées par caractères nécessaire et réduit la place mémoire requise.

Nous avons proposé trois différentes implémentations de notre algorithme et les avons com-parées aux implémentations d’algorithmes existants, avec des résultats satisfaisants. Nous avons ensuite intégré l’implémentation la plus performante dans un éditeur de texte pour réaliser une application web. Cette application est depuis utilisée lors de certaines réunions d’équipe pour prendre des notes en collaboration.

6.2 Perspectives

Concernant notre approche OT, nous n’avons pas conduit d’études sur les performances de notre algorithme. Théoriquement, il est plus rapide que les approches existantes car une édition locale génère moins d’opérations. Toutefois, ces opérations ainsi que les transformées associées sont plus complexes et s’exécutent sur une structure différente. Bien que le point important de notre approche soit le respect des intentions des utilisateurs, il serait intéressant de comparer véritablement notre approche à celles existantes en terme de rapidité d’intégration et de place mémoire.

Concernant notre approche CRDT, le fait de travailler avec des blocs de caractères réduit la taille mémoire utilisée par l’algorithme, mais des éditions répétées au même endroit du document conduisent à une augmentation rapide de la taille mémoire utilisée par caractère. Ceci est dû à une augmentation du nombre de blocs plus rapide que l’augmentation du nombre de caractères.

Un mécanisme de fusion des blocs permettrait de lisser le document et de réduire périodiquement la place mémoire prise par l’algorithme.

De plus, la méthode utilisée pour scinder des blocs en deux peut être adaptée pour d’autres

Fonctions de transformations complètes

Documents relatifs