2009-06-12 9 views
0

J'écris une application Web qui dispose d'une interface utilisateur pour l'édition de données. L'idée est quelque chose de similaire à un wiki où il y a des modifications à des morceaux de texte. Quelle est la meilleure façon de gérer les modifications asynchrones de plusieurs utilisateurs? La situation que je considère est la suivante:Gestion des modifications asynchrones de documents sur le Web

Il existe un document qui est la version 0. L'utilisateur A l'édite lorsqu'il s'agit de la version 0. Quelques minutes plus tard, mais avant que l'utilisateur A enregistre ses modifications, l'utilisateur B ouvre le même document et commence l'édition. Comment le serveur doit-il traiter les deux modifications différentes à la version 0 du document? Aussi, quel est ce problème appelé et où puis-je obtenir plus d'informations sur des problèmes similaires?

Répondre

0

Wikipedia aborde ce problème de la manière suivante:

On suppose que la personne A et la personne B sont à la fois l'édition du même document. Supposons également la personne A soumet leurs modifications un peu avant la personne B.

  • D'abord le logiciel wiki média gère un diffing algorithm traditionnel sur les deux éditions.
  • Ensuite, les résultats de l'algorithme de différenciation sont utilisés pour fusionner le texte.
  • Si l'algorithme de différenciation trouve qu'il existe des conflits de fusion (c'est-à-dire que la personne A et B ont édité le même texte), la personne B est invitée à résoudre les conflits puisqu'ils ont soumis leurs modifications en dernier.

Les poignées de Wikipedia fusionnent les conflits comme les conflits dans un référentiel de code.

Si vous souhaitez autoriser plusieurs personnes de modifier un document simultanément et en temps réel (comme avec google wave ou etherpad), alors je vous recommande la recherche dans operational transforms (aka OT). Bien que l'algorithme OT ne soit pas plus difficile ou plus simple qu'un algorithme de diffing traditionnel, il contient moins d'informations et moins d'implémentations prêtes à l'emploi.

0

Un modèle typique consiste à envoyer à chaque utilisateur un morceau de texte ainsi qu'un numéro de version indiquant la version qu'il a reçue. La règle est que l'hôte n'accepte que la première révision de la version actuellement active.

De cette façon, une seule personne peut réviser chaque version; tout le monde serait informé que leur version était obsolète et que vous pouvez faire ce que vous voulez pour eux à ce moment-là - envoyez-leur habituellement la version actuelle pour réessayer.

Cela ne fonctionne que s'il est peu probable que plusieurs personnes travaillent sur la même version. Si cela est probable, vous devrez probablement rechercher comment subversion gère plusieurs révisions du code source.

Il existe également des méthodes permettant à plusieurs personnes de travailler simultanément sur le même texte et de nourrir les mises à jour des autres - voir par exemple Google Wave.