Je développe une application Web mobile (pour iPhone et Android) avec une base de données locale (en utilisant le stockage Web html5) afin que mon application soit toujours utilisable lorsque l'utilisateur est hors ligne.
Cela fonctionne parfaitement, mais je souhaite enregistrer les données locales sur un serveur. J'ai donc besoin de synchroniser la base de données locale avec une base de données sur un serveur. La synchronisation ne peut être que dans un seul sens, mais à l'avenir, je voudrais la synchroniser dans les deux sens (serveur <-> DB local).
Cette exigence semble très courante (ou le sera à l'avenir pour les applications Web mobiles), mais je ne trouve pas de bibliothèque le faisant.
Je sais que Google fait cela dans leur application Web mobile (ex. Gmail), et j'ai trouvé le projet WSPL comme un projet Google mais sans source à télécharger.
Si je ne trouve pas de solution, je vais créer une bibliothèque pour le faire, car la synchronisation à sens unique ne semble pas difficile, mais je me demande s'il existe d'autres solutions.
Réponses:
https://github.com/orbitaloop/WebSqlSync
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
Pour utiliser cette bibliothèque, vous devez utiliser le DataAccessObject du framework pour accéder à votre base de données. Il fonctionne en stockant toutes les requêtes SQL appliquées à la base de données (sauf select bien sûr), et en les envoyant au serveur. C'est bien de gérer la suppression, mais c'est un peu lourd si vous avez beaucoup de mises à jour et que le serveur doit utiliser le même langage SQL ...
http://www.quickconnectfamily.org/qcdbsync/ (je pense qu'il stocke également l'historique de toutes les requêtes SQL)
https://github.com/zefhemel/persistencejs
"persistence.js est une bibliothèque de mappage relationnel objet Javascript asynchrone. Vous pouvez l'utiliser dans le navigateur, ainsi que sur le serveur (et vous pouvez partager des modèles de données entre eux)."
Ils ont un module de synchronisation de base de données: DOC de persistence.synch.js
(fonctionne avec HTML5 DB SQLite ou Google Gears sur le client et MySQL sur le serveur)
http://impel.simulacre.org/api/Impel.inTouch
http://www.sencha.com/products/io/
la source
J'ai développé une solution de synchronisation générique appelée WebSqlSync .
Cela ne dépend d'aucun cadre. Il est disponible ici: https://github.com/orbitaloop/WebSqlSync
Extrait du fichier README:
WebSqlSync
Synchronisez automatiquement une base de données WebSql locale (SQLite dans le navigateur) avec un serveur. (Synchronisation bidirectionnelle: client <-> serveur)
Très facile à intégrer à votre application existante et très facile à utiliser (2 fonctions à appeler: initSync et syncNow)
Usage
Initialiser
Vous devez initialiser la lib (à chaque démarrage par exemple).
Il créera automatiquement 2 tables (si elles n'existent pas déjà, une pour stocker tous les éléments nouveaux ou modifiés (table new_elem) et une pour stocker la date de la dernière synchronisation (table sync_info). Il créera également des déclencheurs SQLite dans afin de regarder l'INSERT ou UPDATE sur les tables que vous souhaitez synchroniser (pour insérer automatiquement les éléments modifiés dans la table new_elem):
Où TABLES_TO_SYNC est la liste des tables que vous souhaitez synchroniser avec le serveur, ex:
Synchroniser
Pour démarrer la synchronisation, vous devez appeler la fonction syncNow. Vous pouvez l'appeler toutes les X secondes, ou après quelques modifications par exemple:
Et c'est tout ce que vous devez faire sur le client. Côté serveur, vous devrez coder votre propre solution (mais ce n'est pas compliqué). Et il y a quelques exemples inPHP & Java. Encore une fois, les contributions sont les bienvenues.
la source