2010-07-07 3 views
5

J'ai une application serveur qui offre des données à un certain nombre de clients sur le réseau. Vous pouvez imaginer les données comme une énorme liste de chaînes. Les données sur le serveur peuvent changer et doivent être synchronisées sur tous les clients.Existe-t-il un modèle pour synchroniser les listes de données sur le réseau?

J'utilise actuellement cette approche: Lors de la connexion initiale, une application cliente demande toutes les données en cours (ce qui peut représenter beaucoup d'octets). Ensuite, il s'abonne aux mises à jour (addition, s changements et suppressions) de toutes les données. Cela fonctionne très bien, sauf si les données sont modifiées sur le serveur entre l'envoi de la liste de données initiale et l'inscription de l'application aux changements - dans ce cas, le client manque quelques mises à jour et travaille sur des données obsolètes sans le savoir. Je crois que c'est un scénario très courant, donc il devrait y avoir un modèle qui résout le problème. J'utilise C# 4 et WCF, mais le modèle devrait être agnostique de langage je crois.

Répondre

0

Je n'ai aucune expérience à faire, mais ...

Si chaque « connexion initiale » contient un « horodatage », et lorsque vous vous abonnez, vous subscribe « depuis l'horodatage de la connexion initiale » alors serveur pourrait inclure tous changements depuis cet horodatage, oui? La clé doit inclure une notion canonique de l'heure sur laquelle le client et le serveur s'accordent.

par exemple. au lieu de

void Connect() 
Subscribe() 

vous avez

Timestamp Connect() 
Subscribe(timestamp) 
0

Je voudrais juste ajouter un autre message qui envoie une mise à jour complète au client immédiatement après la demande SUBSCRIBE. Alternativement, le client pourrait initialement supposer que la liste est vide et le serveur envoie des messages pour reconstruire la liste complète sur le client en les empaquetant dans un certain nombre de messages "addition" incrémentiels.

2

Avez-vous regardé le Synchronization Framework de Microsoft pour .Net. Il vous donne un contrôle plus précis sur ce qui est synchronisé et comment. WCF est entièrement pris en charge. Il prend en charge les mises à jour incrémentielles et la synchronisation des modifications sur le serveur. L'API est assez grande et couvre plus que la simple synchronisation de base de données, mais il y a beaucoup d'articles là-bas. Cela devrait vous aider à démarrer:

Introduction to Sync Framework Database Synchronization

Synchronizing Databases

0

Peut-être que cet article sur Architecture Patterns for Data Synchronisation sera utile pour vous.

Il semble que le modèle de conception pour la synchronisation des données basées sur les événements soit proche de ce dont vous avez besoin.

Questions connexes