IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

implémentation d’un mécanisme de synchronisation


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut implémentation d’un mécanisme de synchronisation
    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

  2. #2
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    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)?

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par bretus Voir le message
    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

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    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

  5. #5
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonjour,

    Citation Envoyé par olfa2013 Voir le message
    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?
    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)

    Citation Envoyé par olfa2013 Voir le message
    et quelle sont les cas de conflits possible?
    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

  6. #6
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par bretus Voir le message
    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?

  7. #7
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Citation Envoyé par olfa2013 Voir le message
    Apres la rétablissement de connexion et la synchronisation des anciens données!!! comment le serveur va choisir entre les deux version?
    Conflit, c'est à l'utilisateur de choisir.

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    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

  9. #9
    Nouveau membre du Club
    Femme Profil pro
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Merci beaucoup pour vos réponses
    est ce que je peux utiliser Windows Azure dans mon cas? ou aussi Sync Framework?

Discussions similaires

  1. question sur le mécanisme la synchronisation
    Par ouadie99 dans le forum C#
    Réponses: 3
    Dernier message: 30/04/2008, 11h48
  2. Synchronisation de base de données locale/distante Internet
    Par StefC30 dans le forum Développement
    Réponses: 3
    Dernier message: 25/07/2003, 14h47
  3. Réponses: 2
    Dernier message: 06/07/2002, 12h36
  4. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo