Stratégies pour la synchronisation des données avec le serveur de PhoneGap
Je commence ma première PhoneGap projet, en utilisant AngularJS. C'est une base de données axée application, à l'aide d'une API REST comme le backend. Pour commencer, je ne vais pas stocker des données localement à tous, afin de ne pas faire grand-chose sans Internet.
Cependant, j'aimerais par la suite comme pour stocker des données localement, et la synchronisation lors de la connexion Internet est disponible, car je sais que personnellement, j'ai désactiver les connexions Internet sur mon téléphone à la fois (avions, batterie faible), ou n'ont pas les bars. Je me demandais si vous pouviez me pointer vers quelques bonnes ressources pour ce type de synchronisation. Certains ont recommandé les bibliothèques? Ou peut-être quelques discussions des pièges et comment à faire le tour de leur. J'ai Googlé un peu, mais je pense que maintenant, je ne sais pas les questions à poser.
Aussi, mon intention de construire dépendant d'Internet d'abord, puis ajouter la synchronisation.... Est-ce une bonne idée, ou suis-je en me tirer une balle dans le pied? Ai-je besoin pour construire la synchronisation depuis le début?
J'ai eu quelqu'un suggérer bâtiment, l'application locale seulement en premier, plutôt que l'Internet uniquement la première partie, qui a une certaine logique à cela. Le stockage à distance est importante pour moi. Je sais que la décision il y a beaucoup à faire avec mes objectifs pour l'app, mais du point de ce bâtiment, avec l'objectif final étant de stockage local + stockage sur Internet, et dans les deux sens de la synchronisation, ce qui va être plus facile? Ou faut-il quand même faire une différence?
Pour commencer, je suis en train de penser à l'aide des Uuid, plutôt que séquentielle entier clés primaires. J'ai aussi pensé au sujet de l'attribution de chaque appareil un ID qui est le préfixe sur toutes les clés qu'il génère, mais qui semble délicat. Personne a utilisé la technique? Pensées?
Je suppose que j'ai besoin d'un bon système pour dire que les données ont été synchronisées. Sur le côté client, je suppose que tous les enregistrements créés/modifiés, peuvent être marqués pour la synchronisation. Mais sur le côté serveur, vous avez plusieurs clients, de sorte que ça ne marcherait pas. Je suppose que vous pourriez avoir un last_updated timestamp, et tout synchroniser mise à jour de synchronisation de la dernière synchronisation réussie.
Que sur les documents édités en plusieurs endroits? Si deux client modifier, puis à synchroniser, vous avez une certaine ambiguïté au sujet de la fusion, comme lors de la fusion des branches de git ou d'autres systèmes de contrôle de version. Comment gérez-vous cela? Je suppose que git n'en stockant des diff de chaque livraison. Je suppose que vous pouvez stocker des diff? Plus je pense à ce, le plus compliqué, il sonne. Suis-je sur-la pensée ou de la sous-pensée?
Ce sujet de côté client de stockage? J'ai pensé à SQLite, ou le PhoneGap local de stockage chose (http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html). Recommandations? La synchronisation sera plus une API REST, l'échange de JSON, donc je pensais à quelque chose qui en fait stocke les données en JSON, ou quelque chose de JSON-comme c'est facile de convertir, ce serait bien. D'autre part, si je vais avoir à échanger certains de tri de données diff format, peut-être que c'est ce que j'ai besoin de stockage?
- Quelqu'un a utilisé ce? pouchdb.com Semble être pertinent pour beaucoup de mes préoccupations, mais aimerais entendre vos pensées si vous avez été vers le bas de cette route?
Vous devez vous connecter pour publier un commentaire.
Permettez-moi de répondre à votre question en se basant sur mon expérience relative à la synchronisation de la partie car je n'ai pas assez d'expérience avec PhoneGap sera donc ignorer la question sur PhoneGap local de stockage v SQLite.
Il y a un certain nombre de projets open source pour la synchronisation de l'application PhoneGap avec le serveur distant. Mais vous avez probablement de les adapter à vos propres besoins ou mettre en place votre propre fonctionnalité de synchronisation. Ci-dessous j'ai répertorié quelques-uns des projets open-source. Vous devez vous ai déjà fait part de leur si tu avais chercher sur le net.
En outre, vous pouvez envisager d'autres options, mais cela dépend de votre côté serveur:
Je crois que la fonctionnalité de synchronisation est plus comme un module supplémentaire et ne devrait pas être étroitement couplé avec le reste de votre logique métier. Une fois que vous commencez à penser à des stratégies de tests pour votre sync, vous réaliserez qu'il sera plus facile à tester que si votre synchronisation installation est découplé du code principal.
Je pense que vous pouvez lancer votre application dès que possible avec le minimum requis de la fonctionnalité sans synchronisation. Mais vous feriez mieux de penser au sujet de votre architecture et de la façon dont vous ajoutez la synchronisation établissement à l'avance.
Qui dépend des spécifications de votre projet et particulièrement de votre côté serveur. Par exemple, les services mobiles Azure permettent uniquement de type integer pour les clés primaires. Bien que les identifiants uniques comme les clés primaires sont assez pratique dans les systèmes distribués (a quelques inconvénients).
Liées à l'affectation d'un ID de périphérique – je ne suis pas sûr que je comprends bien que je ne sais pas votre projet en détails. Jetez un oeil à la synchronisation de l'algorithme qui est utilisé dans notre système (synchronisation bidirectionnelle à l'aide de REPOS entre les multiples Android clients et SQL-Server).
C'est là que vous avez besoin de réfléchir sur la façon de gérer la résolution des conflits dans votre système.
Si la probabilité de conflits dans votre système sera élevé, par exemple, les utilisateurs seront en changeant les mêmes enregistrements assez souvent. Alors vous feriez mieux de suivre ce champs (colonnes) des enregistrements a été modifié dans votre synchronisation et puis une fois que le conflit est détecté: