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

Décisions SGBD Discussion :

[Conception] Synchronisation BD locale et distante(serveur)


Sujet :

Décisions SGBD

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 30
    Points
    30
    Par défaut [Conception] Synchronisation BD locale et distante(serveur)
    Bonjour,

    J'avais posé cette question sur le forum SGBD mais n'ayant pas eu de réponses, je me permet de la reposer ici, la problématique étant plus conceptuelle que dépendant des base de données.

    Nous avons une application complexe qui tourne sur un serveur et dispose d'une base de données. Technologies utilisées : PHP et MySql

    Cependant cette base de données est la plupart du temps mise à jour en local.

    Mon problème, mettre à jour la base de données serveur avec celle locale, sachant que la mise à jour de la BD n'est pas critique, même si une mise à jour quotidienne serait intéressante.

    Voici les solutions qui s'offrent à moi :
    - Lorsqu'une requête est effectuée en local. l'effectuer aussitôt sur le serveur. D'après moi pas intéressant car la mise à jour à la seconde n'est pas essentielle.
    - Effectuer en batch chaque jour une copie de la BD locale et la charger sur le serveur. Solution lourde car la base de données sera importante et celà oblige à charger des données qui n'ont pas évolué.
    - Enregistrer les requêtes effectuées en local dans un fichier log. Lors d'un batch, effectuer les requêtes dispos dans le fichier sur le serveur puis purger le contenu du fichier log local.

    De mon point de vue, la dernière solution me semble la meilleure.

    Qu'en pensez vous?

    PS : Savez-vous si MySQL permet de logguer automatiquement les requêtes où dois-je coder cette fonctionnalité?

  2. #2
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Si ta solution 1 te semble la meilleure, je ne vois pas vraiment pourquoi tu as une base locale ! Je suppose que si tu as une base locale c'est que l'accès au serveur peut être interrompu ? Que faire alors si tu adopte la solution 1 et que l'accès au serveur est impossible ?

    As-tu la possibilité d'ajouter un champs "Date de mise à jour" dans les tables ? Ainsi, tu pourrais lancer des mises à jour du serveur en prenant toutes les lignes dont la date de mise à jour est supérieure à la dernière date de mise à jour côté serveur (date que tu conserves côté serveur d'ailleurs).

    Sinon, passes à Oracle, il y a la notion de base répliquée et tout ce qu'il faut pour faire la mise à jour du serveur !! Des fois, cela a du bon de payer un peu !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Et bien en fait non à vrai dire la solution 1 ne me semblait pas la meilleure puisque moi j'optais plutôt pour la 3

    Nous avons une base locale car les traitements sur les données sont effectués en local. Cet aspect là ne dépends pas de moi, tout comme le choix de MySQL d'ailleurs alors faut je fasse avec

    Sinon j'aime bien ta solution avec le champs supplémentaire. Bien que ça m'oblige à retoucher le schéma de la base, je pense que c'est la solution la plus souple.

    Thanks.

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    De retour après réflexion et discussion avec un autre membre du forum.

    La solution avec le champ 'mise à jour' pose problème dans le cas des lignes qui ont été effacées entre-temps. Pas moyen de connaitre celles-ci à moins d'effectuer un traitement entre les 2 bases pour voir les différences, ce qui au final commence à de venir assez lourd.

    Après réflexion, je persiste à croire que la solution consistant à logguer les requêtes dans un fichier SQL local, à mettre à jour la BD serveur à partir de ce fichier et à viderce fichier en local est la moins couteuse en temps de traitement est n'est pas moins souple que les autres solutions.

    Mais je reste ouvert à la discussion si tu vois des désavantages à ma solution, n'hésites pas à m'en faire part.

    A++

  5. #5
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Attention aux problèmes de concurrence, aux éventuels rollbacks et au séquencement des ordres exécutés par plusieurs utilisateurs (ordre à conserver absolument). Il faut que l'écriture des requêtes dans ta "log" soit aussi transactionnelle. Je te conseille donc d'utiliser MySql pour faire cela et non un fichier à part.

    Autre point, attention à la manière de gérer les ordres SQL envoyés à ta base car si (si tu fais du Java) tu utilises des PreparedStatement avec paramètres, par exemple, on a tendance à faire des "setParameters" puis un "statement.execute()" sans réellement "savoir" quel est l'ordre SQL envoyé à la base. Il faudra donc pour chaque ordre créer d'abord la requête sous la forme de String puis dans la MEME transaction faire statement.execute() ET statementEnregistrementSQLPrecedent.execute().

    N'y aurait-il pas une log dans MySQL qui ferait déjà ce boulot ? Et utilisable sur une autre base ?

  6. #6
    ego
    ego est déconnecté
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    1 883
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 883
    Points : 3 510
    Points
    3 510
    Billets dans le blog
    2
    Par défaut
    Hé ! je viens de trouver cela... et je retire ma remarque sur Oracle

    http://dev.mysql.com/doc/mysql/en/replication.html

    Tu devrais trouver ton bonheur !!!

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 33
    Points : 30
    Points
    30
    Par défaut
    Yes c'est pile poil ce qu'il me faut. Comme quoi j'ai bien fait de poser la question, ça m'évitera de réinventer la roue.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conception synchronisation BD locale et BD distante
    Par amgab2003 dans le forum ALM
    Réponses: 2
    Dernier message: 11/05/2010, 14h31
  2. Réponses: 4
    Dernier message: 06/09/2006, 18h57
  3. mise à jour d'une BDD locale sur un serveur distant
    Par jive dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 22/08/2005, 21h26
  4. [Conception] Export de base locale sur le serveur
    Par Destampy dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 14/06/2005, 14h24
  5. Synchronisation BD locale et distante(serveur)
    Par 73672 dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 04/02/2005, 13h29

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