39 votes

Stratégie de synchronisation des données hors ligne / en ligne

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?

29voto

Dónal Points 61837

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 la 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.

17voto

Kieveli Points 7162

Le 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.

Soyez 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.

5voto

Norman Ramsey Points 115730

Votre synchroniseur doit identifier quand les données peuvent simplement être mises à jour et quand un être humain doit arbitrer un conflit potentiel. J'ai écrit un article qui explique comment faire cela en utilisant les lois de journalisation et algébriques .

0voto

Ankit Verma Points 1

Vous pouvez utiliser une autre méthode et la personnaliser selon vos besoins. Synchronisation de base de données hors ligne en ligne

0voto

CruiZen Points 112

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 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X