Comment gérez-vous la synchronisation bidirectionnelle entre un serveur de base de données «principal» et de nombreux serveurs «secondaires», en particulier la résolution des conflits, en supposant qu'une connexion n'est pas toujours disponible?
Par exemple, j'ai une application mobile qui utilise CoreData comme «base de données» sur iOS et j'aimerais permettre aux utilisateurs de modifier le contenu sans connexion Internet. Dans le même temps, ces informations sont disponibles sur un site Web auquel les appareils se connecteront. Que dois-je faire si / lorsque les données sur les deux serveurs DB sont en conflit?
(Je me réfère à CoreData comme un serveur de base de données, bien que je sache que c'est quelque chose de légèrement différent.)
Existe-t-il des stratégies générales pour traiter ce type de problème? Voici les options auxquelles je peux penser:
1. Utilisez toujours les données côté client en priorité
2. Identiques pour le serveur
3. Essayez de résoudre les conflits en marquant l'horodatage de modification de chaque champ et en effectuant la dernière modification
Bien que je sois certain que la 3ème option ouvrira la place à une corruption de données dévastatrice.
Je suis conscient que le théorème de la PAC concerne cela, mais je veux seulement une cohérence éventuelle, donc il ne l'exclut pas complètement, non?
Question connexe: modèles de meilleures pratiques pour la synchronisation bidirectionnelle des données . La deuxième réponse à cette question dit que cela ne peut probablement pas être fait.