2009-02-21 8 views
1

Il s'agit d'un système d'application client/serveur.Algorithme de synchronisation de l'ordre des entrées

L'application de la partie client peut passer en mode hors ligne et se synchronise parfois avec le serveur. (comme GMail offline)

Plus d'un client peut se connecter au serveur, ainsi chaque client peut ajouter, éditer et supprimer ses entrées et synchroniser ces changements comme SVN (la collision peut se produire, mais ce n'est pas un problème.)

L'algorithme pour ajouter, modifier et supprimer des entrées est trivial. Le serveur peut créer un identifiant unique pour chaque nouvelle entrée et les clients utilisent ces identifiants pour la mise à jour et la suppression.

La nouvelle exigence est la commande d'entrées.

Il existe deux applications client - x, y. Et ils les entrées enregistrées - A, B, C et D. Ces entrées tableau comme DRASA, de sorte que la propriété de l'ordre de A est 4, B est 3, C est 2 et D est 1.

  • x: DCBA: A (4), B (3), C (2), D (1)
  • y: DCBA: A (4), B (3), C (2), D (1)

client y créer une nouvelle entrée E entre D et C

  • x: DCBA: A (4), B (3), C (2), D (1)
  • y: D-E-C-B-A: A (5), B (4), C (3), D (1), E (2)

Après la synchronisation du client avec le serveur.

  • x: DECBA: A (5), B (4), C (3), D (1), E (2)
  • y: DECBA: A (5), B (4) , C (3), D (1), E (2)

Comment puis-je synchroniser ces informations de commande?


* Essai complémentaire *

Cient x enlever D et C, mais le client y créer une nouvelle entrée E entre D et C.

  • x: BA: A (2) , B (1)
  • y: DECBA: A (5), B (4), C (3), D (1), E (2)

Après la synchronisation. CBA:: A (5), B (4), C (3), D (1), E (2)

  • y: CBA: A (5), B (4)

    • x , C (3), D (1), E (2)

  • Répondre

    0

    Vous pouvez jeter un oeil à la façon dont les poignées FeedSync ce problème (et plusieurs autres) impliqués dans la synchronisation.

    0

    La seule partie difficile est quand une entrée a été supprimée, non? Que diriez-vous de conserver les entrées supprimées sur le serveur, mais les marquer comme supprimés. Une fois que tous les clients se sont synchronisés avec le serveur, aucun d'eux ne connaît l'entrée, vous pouvez également le supprimer définitivement du serveur.

    1

    Je crois que vous devriez coller au protocole SVN. Vous ne devez pas autoriser la soumission sans synchroniser (mise à jour) pour voir si des modifications sont survenues.

    Si vous ne faites pas cela, vous aurez de gros problèmes avec la cohérence (cohérence) des données stockées. Par exemple vous avez stocké D - C - B - A et les clients x et y sont synchronisés.

    • client x supprime C et A -> D - B
    • synchronisation client z, il obtient D - B et il ajoute F entre D et B -> D - F - B
    • entre-temps client y ajoute E entre C et B -> D - C - E - B - A

    maintenant, si tous les clients se synchronisent vous ne pouvez pas dire où F sera mis en séquence de données: D - F - E - B ou D - E - F - B.

    Questions connexes