Stratégie pour Hors ligne/en Ligne la synchronisation des données
Mon exigence est que j'ai du serveur d'application web J2EE et le client d'application web J2EE. Parfois, le client peut passer en mode hors connexion. Lorsque le client est en ligne, il devrait être en mesure de synchroniser les modifications çà et là. Aussi, je devrais être capable de contrôler les lignes/tables doivent être synchronisés, basé sur certains des filtres et des règles. Est-t-il déjà la liste des frameworks Java pour le faire? Si j'ai besoin d'implémenter sur mon propre, quelles sont les différentes stratégies que vous pouvez proposer?
Une seule solution dans mon esprit, c'est le maintien de journaux sql et de l'exécution même des déclarations à l'autre côté lors de la synchronisation. Voyez-vous des problèmes avec cette stratégie?
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de bibliothèques Java pour la synchronisation des données/de la réplication. Deux que je suis conscient de jonquille et SymmetricDS. Dans une vie antérieure j'ai bêtement mis en œuvre (en Java) de mon propre processus de réplication des données. Il semble que le genre de chose qui devrait être assez simple, mais si les données peuvent être mises à jour en plusieurs endroits simultanément, c'est hellishly compliqué. Je vous recommande fortement d'utiliser l'un de ces projets pour essayer de dérivation et de traiter la complexité de ce processus vous-même.
La biggist problème avec la synchronisation lorsque l'utilisateur modifie quelque chose hors ligne, et il est édité en ligne en même temps. Vous avez besoin de fusionner les deux changé de données, ou de traiter avec l'INTERFACE utilisateur pour permettre à l'utilisateur de dire quelle version est la bonne. Si vous éliminez la possibilité d'être édité à la même heure, alors vous n'avez pas à résoudre ce problème épineux.
La méthode est généralement pour ajouter un champ "date de modification" à toutes les tables, et de comparer le client de champ modifié pour un enregistrement donné dans une ligne donnée, sur le serveur de la date de modification. Si elles ne correspondent pas, alors vous remplacer le serveur de données.
Être prudent avec générés automatiquement des clés, vous devez vous assurer que votre intégrité des données est conservée lorsque vous copiez à partir du client vers le serveur. Strictement l'exécution des instructions SQL à nouveau sur le serveur pourrait vous mettre dans une situation où l'générée automatiquement clé a changé, et tout à coup votre les clés étrangères sont pointant vers les différents dossiers que vous le souhaitez.
Souvent lors de l'importation de données à partir d'une autre source, vous garder une trace de la clé primaire de la source étrangère ainsi que votre propre clé primaire. Cela permet de déterminer les changements et les différences entre les ensembles de données plus facile pour les difficile la synchronisation des situations.
Votre synchroniseur doit identifier lorsque les données peuvent être simplement mis à jour et quand un être humain a besoin de la médiation d'un conflit potentiel. J'ai écrit un livre qui explique comment faire cette utilisation de la journalisation et les lois algébriques.
Ce qui est le mieux adapté que le côté client de la banque de données dans votre application? Vous pouvez choisir à partir d'une base de données intégrée comme SQLite ou une file d'attente de messages ou certains magasin d'objets ou (si aucun ne peut être utilisé car il est une application web) fichiers/documents enregistrés sur le client Web à l'aide de DB ou IndexedDB grâce à HTML 5 de la LocalStorage API.
Vérifiez le papier La Ruée vers l'or: Mobile, Opération de Middleware Java-Objet de Réplication. La documentation de Microsoft de systèmes connectés occasionnellement décrit deux approches: axée sur le service ou orienté message et axée sur les données. La Ruée vers l'or prend de l'approche précédente. L'autre approche utilise la base de données de fusion et de réplication.