bonjour
comment je peux realiser un algorithme de synchronisation entre plusieurs applications (locales et distante) et il doit assurer la cohérence de données après chaque synchronisation?
merci d'avance
bonjour
comment je peux realiser un algorithme de synchronisation entre plusieurs applications (locales et distante) et il doit assurer la cohérence de données après chaque synchronisation?
merci d'avance
Bonjour,
Contexte un peu léger pour répondre : La réponse dépend du stockage des données.
Peut-être faut-il s'inspirer de l'existant (rsync, git ou encore réplication de base de données)?
Merci pour ta réponse !
je vais vous détailler le problématique:
Dans le cadre de mon PFE je dois concevoir une solution «*hybride*» qui permet à la fois l'utilisation de l’application en mode «*Online*» ou «*Offline*»
Cette solution nécessite que l’application soit hébergée sur un serveur (en Cloud) et aussi sur le site du client (en local).
C’est dans ce cadre que le mécanisme de synchronisation se présente. Il est important d’instauré un processus de communication robuste entre les deux entités (serveur et client) et qu’il soit garant de la consistance et la cohérence des données, quel que soit le scénario d’utilisation de l’application.
La robustesse de ce système doit se manifester à travers un algorithme qui couvre exhaustivement les différents cas d’utilisation de l’application dans ses deux modes.
Comment je peux réaliser l’algorithme entre les applications (locales et distante) sachant qu'il doit assurer la cohérence de données après chaque synchronisation?
et quelle sont les cas de conflits possible?
Merci d'avance
Il te faut commencer par modéliser les échanges..
Requête -> Réception (-> Accusé de réception ?) -> Attente -> Réponse
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Bonjour,
Je pense qu'il faut que tu commences par préciser ce que tu entends par cohérence des données :
- Cohérence du référentiel à l'état courant (unicité, clé étrangère,...)
- Cohérence des synchronisations (détecter et gérer les conflits)
A modifie / B modifie
A modifie / B supprime
A supprime / B modifie
Après, tu as les conflits sur les changements de structure (ajout d'une colonne, renommage, etc.), mais on va commencer soft!
Dans la pratique, je te propose la piste suivante :
1) Tu poses une structure de données que tu implémenteras classiquement dans un SGBDR
Tu pourras alors assurer la cohérence des données sur chaque instance de la base de données. Tu fixes que chaque objet à un identifiant (disons "id" où je te conseille un UUID pour du réparti en lieu et place d'une séquence)
2) Tu conserves l'historique sur chacun des objets (numéro de version)
Pour "user", tu fais une table "user_historique" ou tu ajoutes une colonne "etat" (vivant/detruit), ainsi qu'une colonne "version" (1 à la création, incrémenté à la modification et à la destruction). Niveau implémentation, ça se fait à coup de TRIGGER.
A partir de ça, tu peux écrire un algorithme pour envoyer les modifications d'une base A vers une base B en détectant les conflits sur la base du couple (id,version).
En espérant que ça t'aide à avancer.
PS :
- Par rapport à la remarque de souviron, des transactions t'apporteront la sécurité nécessaire pour les échanges réseaux.
- C'est pas complet pour être efficace : Envisage d'ajouter un identifiant de transaction avec un timestamp
- Gère les conflits au niveau du client qui va envoyer ses modifications
bonjour,
Merci pour ta réponse en fait mon application est hébergé dans le cloud, le problème est comment je peux assurer la cohérence si un l’utilisateur par exemple change les données d'un produit et après la connexion a coupé et a partir d'un autre endroit l'utilisateur ne trouve pas ces modification donc il est obligé de ressaisir les données. Apres la rétablissement de connexion et la synchronisation des anciens données!!! comment le serveur va choisir entre les deux version?
Dans ce cas ma suggeston serait de ne pas choisir, mais stocker la modification avec la date, l'usager, etc...
Enfin, c'est une suggestion et un point de vue...
Un autre mécanisme, de manière générale (c'est à dire en dehors de l'hypothèse où tu fais affaire à un outil connu), ce serait de :
- stocker dans une base // et temporaire les modifs.
- Lorsqu'une modif sur les mêmes données à l'intérieur d'un certain laps de temps intervient, faire un nouvel AR, c'est à dire envoyer au dernier utilisateur une notification de l'avant-dernier changement, par qui, quoi, et à quelle heure, et lui demander confirmation de sa modification à lui...
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
Merci beaucoup pour vos réponses
est ce que je peux utiliser Windows Azure dans mon cas? ou aussi Sync Framework?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager