Aujourd'hui, dans le monde où un grand nombre d'ordinateurs, les appareils mobiles ou de services web, partager des données ou d'agir comme les hubs, la synchronisation devient de plus en plus important. Comme nous le savons tous, des solutions de synchronisation ne sont pas les plus confortables et il est préférable de ne pas synchroniser à tous.
Je suis toujours curieux de savoir comment vous mettre en œuvre une solution de synchronisation pour la synchronisation entre plusieurs entités. Il y a déjà beaucoup de différentes approches, comme comparer un changement de champ de date ou d'un hachage et en utilisant les données les plus récentes ou permettant à l'utilisateur de choisir ce qu'il souhaite utiliser dans un cas de conflit. Une autre approche est d'essayer de fusionner automatiquement en conflit données (qui à mon avis n'est pas si intelligent, parce qu'une machine ne peut pas deviner ce qu'a voulu dire l'utilisateur).
De toute façon, ici sont un couple de questions liées à la synchronisation que nous devons répondre avant de commencer à mettre en œuvre la synchronisation:
- Qu'est-ce que les données les plus récentes? Comment puis-je tiens à le représenter?
- Que dois-je faire en cas de conflit? Fusion? Dois-je l'invite et demander à l'utilisateur ce qu'il doit faire?
- Que dois-je faire quand je suis dans un état incohérent (par exemple, un décalage en raison d'une pâte connexion au réseau mobile)?
- Que dois-je faire lorsque je ne veux pas entrer dans un état incohérent?
- Comment puis-je reprendre une synchronisation actuel qui s'est interrompu?
- Comment puis-je gérer le stockage de données (par exemple, base de données MySQL sur un service web, Base de Données sur un iPhone; et comment dois-je les fusionner ou de synchronisation de données sans beaucoup de colle de code)?
- Comment puis-je gérer les modifications de l'utilisateur qui se produisent lors de la synchronisation (qui s'exécute en arrière-plan, de sorte que l'INTERFACE utilisateur n'est pas bloqué)?
- Comment et dans quelle direction dois-je propager les modifications (par exemple, un utilisateur crée un "Foo" entrée sur son ordinateur et n'a pas de synchronisation; puis il est sur la route et crée un autre "Foo" entrée; ce qui arrive quand il essaie de synchroniser les deux appareils)? L'utilisateur a deux "Foo" entrées avec différents Identifiants uniques? L'utilisateur ont une seule entrée, mais lequel?
- Comment dois-je gérer la synchronisation lorsque j'ai des données hiérarchiques? De haut en bas? Bottom-up? Dois-je traiter chaque entrée automatiquement ou dois-je seulement regarder un supernœud? Quelle est la taille du trade-off entre trop simplifier les choses et d'investir trop de temps dans la mise en œuvre?
- ...
Il y a beaucoup de questions, et j'espère que je pourrais vous inspirer assez. La synchronisation est plutôt un problème général. Une fois un bon, polyvalent synchronisation approche est trouvé, il devrait être plus facile de l'appliquer à une application concrète, plutôt que de commencer à penser à partir de zéro. Je me rends compte qu'il y a déjà beaucoup de demandes que d'essayer de résoudre (ou de résoudre avec succès) la synchronisation, mais ils sont déjà assez spécifiques et ne donnent pas assez de réponses à la synchronisation des approches en général.