2009-06-12 8 views
0

Ich schreibe eine Webanwendung mit einer Benutzeroberfläche zum Bearbeiten von Daten. Die Idee ist ähnlich wie in einem Wiki, wo Textabschnitte bearbeitet werden. Was ist der beste Weg, asynchrone Bearbeitungen von mehreren Benutzern zu bearbeiten? Die Situation, die ich in Betracht ziehe, ist dies:Bearbeitung asynchroner Bearbeitungen von Dokumenten im Internet

Es gibt ein Dokument, das Version 0 ist. Benutzer A bearbeitet es, wenn es Version 0 ist. Wenige Minuten später, aber bevor Benutzer A seine Änderungen speichert, öffnet Benutzer B dasselbe Dokument und beginnt mit der Bearbeitung. Wie sollte der Server die zwei verschiedenen Änderungen der Version 0 des Dokuments behandeln? Wie heißt dieses Problem und wo kann ich mehr Informationen über ähnliche Probleme bekommen?

Antwort

0

Wikipedia geht dieses Problem auf folgende Weise:

sei angenommen, dass Person A und Person B beide das gleiche Dokument bearbeiten. Man nehme auch an Person A die Änderungen leicht vor Person B.

  • Zunächst wird die Software Medien Wiki einreicht läuft ein traditionelles diffing algorithm über beide Bearbeitungen.
  • Als Nächstes werden die Ergebnisse des Diffing-Algorithmus zum Zusammenführen des Textes verwendet.
  • Wenn der Diffingalgorithmus feststellt, dass es Mischkonflikte gibt (d. H. Person A und B haben denselben Text bearbeitet), wird Person B aufgefordert, die Konflikte zu lösen, da sie ihre Änderungen zuletzt übermittelt haben.

Wikipedia behandelt Zusammenführungskonflikte ähnlich wie Konflikte in einem Code-Repository.

Wenn Sie mehreren Personen zu bearbeiten ein Dokument gleichzeitig und in Echtzeit ermöglichen wollen (wie bei google wave oder etherpad), dann würde ich auf der Suche in operational transforms empfehlen (aka OT). Obwohl der OT-Algorithmus nicht schwieriger oder einfacher als ein herkömmlicher Diffing-Algorithmus ist, gibt es weniger Informationen darüber und weniger fertige Implementierungen.

0

Ein typisches Muster besteht darin, jedem Benutzer einen Textblock und eine Versionsnummer zu senden, die angibt, welche Version er erhalten hat. Die Regel ist, dass der Host nur die erste Revision der aktuell aktiven Version akzeptiert.

So kann nur eine Person jede Version revidieren; allen anderen würde gesagt werden, dass ihre Version veraltet ist und Sie können zu diesem Zeitpunkt tun, was Sie für sie wollen - normalerweise senden Sie ihnen die aktuelle Version, um es erneut zu versuchen.

Dies funktioniert nur, wenn es unwahrscheinlich ist, dass mehrere Personen an der gleichen Version arbeiten. Wenn das wahrscheinlich ist, müssen Sie wahrscheinlich untersuchen, wie Subversion zum Beispiel mehrere Versionen des Quellcodes behandelt.

Es gibt auch Schemata für mehrere Personen, die gleichzeitig an demselben Text arbeiten und sich gegenseitig die Updates geben - siehe Google Wave für ein Beispiel.

Verwandte Themen