Mysql
 sql >> Base de données >  >> RDS >> Mysql

iOS - Meilleures pratiques de synchronisation des données de base et de la base de données du serveur

Je stocke un horodatage de dernière modification dans la base de données sur les enregistrements de données de base sur le téléphone et les tables mysql sur le serveur.

Le téléphone recherche tout ce qui a changé depuis la dernière synchronisation et l'envoie au serveur avec un horodatage de la dernière synchronisation, et le serveur répond avec tout ce qui a changé depuis l'horodatage de synchronisation fourni.

Les performances sont un problème lorsque de nombreux enregistrements ont changé. Je fais la synchronisation sur un arrière-plan NSOpeartion qui a son propre contexte d'objet géré. Lorsque le thread d'arrière-plan a fini d'apporter des modifications à son contexte d'objet géré, il existe une API pour fusionner toutes les modifications dans le contexte d'objet géré du thread principal - qui peut être configuré pour simplement rejeter toutes les modifications s'il y a des conflits causés par l'utilisateur modifiant les données pendant la synchronisation. Dans ce cas, j'attends quelques secondes, puis j'essaie à nouveau de synchroniser.

Sur du matériel plus ancien, même après de nombreuses optimisations, il était nécessaire d'interrompre complètement la synchronisation si l'utilisateur commençait à faire des choses dans l'application. Il utilisait simplement trop de ressources système. Je pense que les appareils iOS plus modernes sont probablement assez rapides pour que vous n'ayez plus besoin de le faire.

(au fait, quand j'ai dit "beaucoup d'enregistrements ont changé", je voulais dire environ 30 000 lignes mises à jour ou insérées sur le téléphone)