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

Installation MySQL Discussion :

M.A.J. et flux entre base de données


Sujet :

Installation MySQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 103
    Points : 87
    Points
    87
    Par défaut M.A.J. et flux entre base de données
    Bonjour a tous,


    Je m'excuse par avance au cas ou je n'aurais pas posté au bon endroit mais je ne savais pas ou mettre mon post. En fait je suis en stage et je suis confronté à une situation complexe.


    L'entreprise pour laquelle je travaille réalise des interventions de maintenance chez ses clients. Je suis chargé de développer un logiciel de gestion classique pour gérer ces interventions de maintenances (ajouter/modifier/supprimer une intervention, ajouter/modifier/supprimer un client,ajouter/modifier/supprimer un technicien, ajouter/modifier/supprimer une machine...). Pour ce logiciel de gestion pas de difficultés. Je développe sous java (avec netbeans) et j'utilise une base de données mysql (avec phpmyadmin). A terme, la base de données permettra de réaliser des staistiques sur les interventions.


    L'entreprise est équipée d'un réseau local au sein duquel il y a un serveur. La base de données "principale" sera donc sur le serveur. C'est maintenant que ça se complique, en intervention à l'exterieur de l'entreprise, les techniciens prendront avec eux leur ordinateur portable pour notifier l'intervention. Il faudra donc installer le logiciel et la base de données sur chaque ordinateur portable de technicien. Pour cela pas de soucis, un export de la bbd située sur le serveur puis un import sur les ordinateurs portables.


    Une fois l'intervention réalisée et les données enregistrées dans l'ordinateur portable du technicien, il va falloir rajouter ces nouvelles données dans la base de données du serveur. Etant donné qu'il y a plusieurs techniciens, régulièrement (voir quotidiennement ou plus) les techniciens vont devoir importer sur leur ordinateur portable la base de données mise à jour, pour avoir ainsi toutes les données, notemment celles rajoutées par les autres techniciens sur la base de données du serveur après leurs interventions respectives. Je rajoute qu'entre deux interventions les techniciens ont la possibilité de revenir dans l'entreprise pour éventuellement avoir accès au serveur.


    J'espère avoir été suffisament clair, ma question est donc, que me conseillez vous pour gérer au mieux ces flux et mises à jour de base de données incessants ?


    merci beaucoup pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 390
    Points : 465
    Points
    465
    Par défaut
    Je pense que le plus facile serait que ton logiciel et ton serveur de base de donné soit disponible depuis l'exterieur en DMZ, ainsi les tech pourrait mettre à jour leur inter depuis n'importe qu'elle lieu ou il y a une connexion internet. Si tu est rétissant à mettre en DMZ ta base tu peux aussi passer par un VPN.


    Tu peux également envisager de logguer au fur et à mesure des mises à jours dans un fichier sql et le réimportez dans ta base une fois le tech revenu. Tout dépends si la tache est crée avant le départ du tech ou in situ. Cela dépends également de la structure de ta base. Les auto increment te ferai chier. Si ce ne sont que des update, tu peux tout a fait envisager de journaliser les mise à jours.

    Malheureusement il n'y a pas de réplication multi maitre sous mysql. (afin pas que je sache)


    j'espere avoir ete clair hesites pas à pme contacter en MP
    La connaissance s'accroit lorsqu'on la partage.

  3. #3
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 103
    Points : 87
    Points
    87
    Par défaut
    Tout d'abord un grand merci pour ta réponse, c'est exactement ce dont j'avais besoin : un conseil d'expert


    Je vais déja me renseigner sur tout ce que tu m'as conseillé car je ne suis pas familier de DMZ ,VPN ou encore "réplication multi maitre ".

    Je n'hésiterai pas à te contacter en mp pour tout soucis

    merci encore pour ta réponse, je mettrais "résolu" une fois que j'aurais posté la solution que j'ai choisi...

  4. #4
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 103
    Points : 87
    Points
    87
    Par défaut
    J'ai finalement choisi la solution du fichier sql contenant les requêtes effectuées.

    De prime abord cette solution présente un problème (décrit ci-après) mais j'ai réussi à le résoudre.

    Illustration :

    Prenons deux tables :

    une table type_client avec deux champs :
    -un champ "tycli_id" clé primaire et auto-increment
    -un champ "tycli_intitule" varchar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* table type_client */
    tycli_id	tycli_intitule
    1		association
    2		particulier
    3		administration

    une table client simplifiée avec trois champs :
    -un champ "cli_id" clé primaire et auto-increment
    -un champ "cli_intitule" varchar
    -un champ "cli_fk_tycli_id" clé étrangère de "tycli_id"

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* table client */
    cli_id	cli_intitule			cli_fk_tycli_id
    1	association developpez.com	1
    2	dupont				2
    3	association des maires		1
    Donc voici le contenu de la base de données, sur le serveur, sur le portable du technicien François et sur le portable du technicien Guy. Les techniciens François et Guy partent en intervention. En intervention François ajoute le type "conseil", on se retrouve donc pour la base de données sur son portable avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* table type_client */
    tycli_id	tycli_intitule
    1		association
    2		particulier
    3		administration
    4		conseil
    Maintenant François décide d'ajouter le client appelé "conseil général" dont le type est "conseil" on se retrouve avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* table client */
    cli_id	cli_intitule			cli_fk_tycli_id
    1	association developpez.com	1
    2	dupont				2
    3	association des maires		1
    4	conseil général			4

    Guy, de son côté, bien sûr n'a pas ajouté "conseil" ni le client "conseil général". Il ajoute le type "ministère" et le client "ministère de l'écologie" de type "ministère", on se retrouve donc pour la base de données de son portable avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /* table type_client */
    tycli_id	tycli_intitule
    1		association
    2		particulier
    3		administration
    4		ministère
    
    /* table client */
    cli_id	cli_intitule			cli_fk_tycli_id
    1	association developpez.com      1
    2	dupont				2
    3	association des maires		1
    4	ministère de l'écologie		4
    n'oublions pas que la base de données du serveur est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /* table type_client */
    tycli_id	tycli_intitule
    1		association
    2		particulier
    3		administration
    
    /* table client */
    cli_id	cli_intitule			cli_fk_tycli_id
    1	association developpez.com	1
    2	dupont				2
    3	association des maires		1

    Les requetes executées par François ont donc été enregistrées dans un fichier sql sur l'ordinateur portable de François, il en est de même pour Guy.
    On a donc dans le fichier de François :

    INSERT INTO type_client(tycli_intitule) VALUES('conseil');
    INSERT INTO client(cli_intitule,cli_fk_tycli_id) VALUES('conseil général',4);

    et dans le fichier de Guy :

    INSERT INTO type_client(tycli_intitule) VALUES('ministère');
    INSERT INTO client(cli_intitule,cli_fk_tycli_id) VALUES('ministère de l'écologie',4);

    François et Guy suite à leurs interventions retournent à l'entreprise. La ils se connectent au réseau local pour effectuer les mises à jour (requêtes effectuées en intervention) sur la base de donées du serveur. François execute en premier les requetes contenues dans son fichier sql, puis c'est le tour de Guy.
    Voici a présent le contenu de la base de données du serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /* table type_client */
    tycli_id	tycli_intitule
    1		association
    2		particulier
    3		administration
    4		conseil
    5		ministère
    
    /* table client */
    cli_id	cli_intitule			cli_fk_tycli_id
    1	association developpez.com	1
    2	dupont				2
    3	association des maires		1
    4	conseil général			4
    5	ministère de l'écologie		4 /* cette ligne est erronée */
    Gros problème : on se retrouve avec des données erronées : la dernière ligne de la table client aurait du être :

    "5 ministère de l'écologie 5"

    Vous me direz comment prévoir ce genre de problème au moment d'enregistrer les requêtes dans le fichier sql ? J'ai trouvé une solution en adaptant mes requetes d'insert que j'enregistre dans le fichier SQL :

    au lieu de :

    INSERT INTO client(cli_intitule,cli_fk_tycli_id) VALUES('conseil général',4);

    INSERT INTO client(cli_intitule,cli_fk_tycli_id) VALUES('ministère de l'écologie',4);

    je fais :

    INSERT INTO client(cli_intitule,cli_fk_tycli_id) VALUES('conseil général',(SELECT tycli_id FROM type_client WHERE tycli_intitule = 'conseil'));

    INSERT INTO client(cli_intitule,cli_fk_tycli_id) VALUES('ministère de l'écologie',(SELECT tycli_id FROM type_client WHERE tycli_intitule = 'ministère'));

    -> une requete SELECT au sein de ma requete INSERT. Je suis tombé de haut en découvrant cela, même si c'est assez logique en soi j'ignorais totalement qu'on pouvait faire cela en SQL.



    En résumé chaque requete effectuée sur la base de données (INSERT,UPDATE,DELETE) est enregistrée dans un fichier, il suffit après de récupérer toutes ces requètes et de les executer une à une sur la base de données du serveur pour la mettre à jour. Avec également un module qui fait un "mysqldump" de la base de données du serveur mise à jour pour l'importer dans la base de données du portable du technicien, afin de mettre à jour les base de données des techniciens par rapport à toutes les modifications effectuées par tous les techniciens sur la base de données du serveur.

    Voila c'etait tres long mais je l'espère assez clair. Merci encore à overider pour son attention, son aide et sa disponibilité

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 390
    Points : 465
    Points
    465
    Par défaut
    petit commentaire car le cas de pit m'interesse beaucoup.


    le probleme est toujours les clé autoincrementé lorsque la base de donné est en local. Le mieux est de tout centraliser quand c'est possible via une solution VPN ou dmz.


    Tu peux t'epargner l'etape du dump vers le portable en les mettant esclave de ton serveur: replication mysql VOIR ICI . Tu peux meme aller plus moins en mettant en place de techniques comme décrit ici.
    Mais la cela commence à êter chaud.
    La connaissance s'accroit lorsqu'on la partage.

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

Discussions similaires

  1. référence entre base de données
    Par tipim dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/04/2006, 11h17
  2. Liens entre bases de données hétérogènes
    Par Velodrom dans le forum Oracle
    Réponses: 1
    Dernier message: 17/03/2006, 10h34
  3. Pb de communication entre base de données...
    Par _matt_44 dans le forum PostgreSQL
    Réponses: 24
    Dernier message: 09/06/2005, 11h30
  4. Conflit entre bases de données
    Par BRODU dans le forum Bases de données
    Réponses: 4
    Dernier message: 18/10/2004, 11h40
  5. Transfert de table entre base de données sous delphi
    Par gregcommune dans le forum Bases de données
    Réponses: 3
    Dernier message: 27/07/2004, 07h56

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