2010-12-08 42 views
2

J'ai un backend Spring + Hibernate + MySQL qui expose mon modèle (8 entités différentes) à un client de bureau. Pour rester synchronisé, je souhaite que le client demande régulièrement au serveur les modifications récentes. Le processus peut être la suivante:Stratégie de base de données pour la synchronisation basée sur les changements

  • Point A: Le client se connecte pour la première fois et récupère tout le modèle du serveur.
  • Point B: Le client demande au serveur pour toutes les modifications depuis le point A.
  • point C: Le client demande au serveur pour toutes les modifications depuis le point B.

Pour récupérer les modifications (point B & C) Je pourrais créer une requête HQL qui retourne toutes les lignes de toutes mes tables qui ont été modifiées pour la dernière fois depuis ma récupération précédente. Cependant, j'ai peur que cela puisse être une requête lourde et dégrader ma performance si elle est exécutée souvent. Pour cette raison, je considérais d'autres alternatives comme garder un tableau séparé avec des mises à jour récentes pour un accès rapide. J'ai cherché à utiliser le cache de requêtes L2, mais il ne semble pas servir à mes fins.

Est-ce que quelqu'un connaît une bonne stratégie pour mon but? Ma première pensée est de garder le contrôle de la synchronisation et d'éviter d'utiliser des outils de synchronisation "automatiques".

Un grand merci

Répondre

1

vous pouvez stocker des changements dans une table de file d'attente. Les déclencheurs peuvent remplir la file d'attente lors de l'insertion, de la mise à jour et de la suppression. cela préserve l'ordre des changements comme insérer, mettre à jour, mettre à jour, supprimer. Videz la file d'attente après le téléchargement.

Vider la file d'attente causerait des problèmes si vous avez plusieurs clients .... peut-être besoin de penser à un design pour gérer ce cas.

Vous pouvez choisir parmi plusieurs modèles, tous avec des compromis. J'ai déjà utilisé la conception de la file d'attente, mais il s'agissait uniquement de copier des données vers une seule destination, et non plusieurs.