Donc je pense en résumé que vos questions se rapportent à la synchronisation déconnectée.
Voici donc ce que je pense devrait se produire:
Sync initiale Vous récupérer les données et toutes les informations qui lui sont associés (versions de ligne, de contrôle des fichiers, etc.). Il est important de stocker ces informations et de les laisser intactes jusqu'à la prochaine synchronisation réussie. Les modifications doivent être effectuées sur une COPIE de ces données.
Suivi des modifications Si vous traitez avec des lignes de base de données, l'idée est, vous avez essentiellement pour suivre insérer, mettre à jour et de suppression. Si vous traitez avec des fichiers texte comme xml, alors c'est un peu plus compliqué. S'il est probable que plusieurs utilisateurs éditeront ce fichier en même temps, alors vous devrez avoir un outil de comparaison, ainsi les conflits peuvent être détectés à un niveau plus granulaire (au lieu du fichier entier).
Vérification des conflits Encore une fois, si vous traitez des lignes de base de données, les conflits sont faciles à détecter. Vous pouvez avoir une autre colonne qui s'incrémente chaque fois que la ligne est mise à jour (je pense que mssql a ce builtin pas sûr de mysql). Donc, si la copie que vous avez a un numéro différent de ce qui est sur le serveur, alors vous avez un conflit. Pour les fichiers ou les chaînes, une somme de contrôle fera l'affaire. Je suppose que vous pouvez également utiliser une date modifiée, mais assurez-vous que vous avez une mesure très précise et précise pour éviter les échecs.par exemple: disons que je récupère un fichier et que vous l'enregistrez dès que je l'ai récupéré. Disons que la différence de temps est de 1 milliseconde. Je fais ensuite des modifications au fichier puis j'essaie de le sauvegarder. Si l'heure de la dernière modification enregistrée n'est précise qu'à 10 millisecondes, il y a de fortes chances que le fichier que j'ai récupéré ait la même date que celle que vous avez sauvegardée pour que le programme pense qu'il n'y a pas de conflit et écrase vos modifications. Donc, je n'utilise généralement pas cette méthode juste pour être du bon côté. D'un autre côté, les chances d'une collision checksum/hash après une modification mineure sont proches de zéro.
Résolution de conflits Voici la partie délicate. S'il s'agit d'un processus automatisé, vous devrez alors évaluer la situation et décider si vous souhaitez remplacer les modifications, perdre vos modifications ou récupérer les données du serveur et tenter de rétablir les modifications. Heureusement pour vous, il semble qu'il y aura une interaction humaine. Mais c'est toujours beaucoup de douleur à coder. Si vous traitez des lignes de base de données, vous pouvez vérifier chaque colonne et la comparer aux données du serveur et les présenter à l'utilisateur. L'idée est de présenter les conflits à l'utilisateur de manière très granulaire afin de ne pas les submerger. La plupart des conflits ont de très petites différences dans beaucoup d'endroits différents, alors présentez-les à l'utilisateur une petite différence à la fois. Donc, pour les fichiers texte, c'est presque le même mais plus de cent fois plus compliqué. Donc, fondamentalement, vous devez créer ou utiliser un outil de comparaison (la comparaison de texte est un sujet complètement différent et est trop large pour être mentionné ici) qui vous permet de connaître les petits changements dans le fichier et où ils sont d'une manière similaire à base de données: où le texte a été inséré, supprimé ou modifié. Présentez ensuite cela à l'utilisateur de la même manière. Donc, fondamentalement, pour chaque petit conflit, l'utilisateur devrait choisir de rejeter ses modifications, d'écraser les changements dans le serveur ou d'effectuer une modification manuelle avant de les envoyer au serveur. Donc, si vous avez fait les choses correctement, l'utilisateur devrait recevoir une liste de conflits s'il y en a. Ces conflits doivent être assez granulaires pour que l'utilisateur puisse décider rapidement. Ainsi, par exemple, le conflit est un changement d'orthographe, il serait plus facile pour l'utilisateur de choisir parmi les mots orthographiés contrairement à donner à l'utilisateur tout le paragraphe et lui dire qu'il y avait un changement et qu'ils doivent décider quoi faire , l'utilisateur devrait alors chercher cette petite faute d'orthographe. Autres considérations: Validation des données - Gardez à l'esprit que vous devez effectuer la validation après la résolution des conflits, car les données peuvent avoir changé la comparaison de texte - comme je l'ai dit, c'est un grand sujet. Alors, google! Synchronisation déconnectée - Je pense qu'il y a quelques articles là-bas.
Source: https://softwareengineering.stackexchange.com/questions/94634/synchronization-web-service-methodologies-or-papers
Merci pour vos commentaires. Je pense que le problème que vous avez soulevé concernant le décalage temporel est important. Mon espoir initial est que, entre le NTP sur le serveur et les services de synchronisation de l'heure de l'iPhone/Touch avec les problèmes d'asymétrie de porteuse/ordinateur seront atténués. Cette hypothèse est-elle trop dangereuse? – hyuan
Il est fragile à bien des égards - par exemple, une horloge en cours de réinitialisation peut entraîner des mises à jour manquées, et des mises à jour manquées peuvent entraîner des conflits d'édition non détectés. La réplication multi-maître est une tâche non triviale. –
Merci pour le bon conseil. Espérons que dans quelques semaines, vous pourrez voir les fruits de votre sagesse. Le site en question est déjà en ligne (www.ayenotes.com) mais l'application iPhone ne l'est pas. – hyuan