Je développe une application Web mobile (pour iPhone et Android) avec une base de données locale (utilisant html5 webstorage) afin que mon application soit toujours utilisable lorsque l'utilisateur est hors ligne.
Cela fonctionne parfaitement, mais je veux enregistrer les données locales sur un serveur. Je dois donc synchroniser la base de données locale avec une base de données sur un serveur. La synchronisation ne peut être que dans un sens, mais à l’avenir, j’aimerais le synchroniser dans les deux sens (serveur <-> base de données locale).
Cette requête semble très courante (ou le sera à l'avenir pour les applications Web mobiles), mais je ne trouve pas de bibliothèque qui le fasse.
Je sais que Google le fait dans son application Web mobile (par exemple, Gmail) et j'ai trouvé le projet WSPL , un projet Google mais sans source à télécharger.
Si je ne trouve pas de solution, je créerai une bibliothèque pour le faire, car la synchronisation ne semble pas difficile, mais je me demande s’il existe d’autres solutions.
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. Cela fonctionne en stockant toutes les requêtes SQL appliquées à la base de données (sauf select of course) 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 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 mappeurs Javascript relation-objet asynchrones. 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 DB: 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
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:
Synchronise automatiquement une base de données WebSql locale (SQLite dans le navigateur) sur un serveur. (Sync bidirectionnelle: client <-> serveur)
Très facile à intégrer à votre application existante et très facile à utiliser (2 fonctions à appeler: initSync et syncNow)
Vous devez initialiser la bibliothèque (à 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). Elle créera également des déclencheurs SQLite dans Afin de regarder le INSERT ou UPDATE sur les tables que vous souhaitez synchroniser (pour insérer automatiquement les éléments modifiés dans la table new_elem):
DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);
Où TABLES_TO_SYNC est la liste de la table que vous souhaitez synchroniser avec le serveur, ex:
TABLES_TO_SYNC = [
{tableName : 'table1', idName : 'the_id'},
{tableName : 'table2'} //if idName not specified, it will assume that it's "id"
];
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:
DBSYNC.syncNow(callBackSyncProgress, function(result) {
if (result.syncOK === true) {
//Synchronized successfully
}
});
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 dans PHP & Java. Encore une fois, les contributions sont les bienvenues.