Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Installation
Installation Forum d'entraide sur les problèmes liés à l'installation de MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/06/2007, 08h40   #1
Membre du Club
 
Inscription : mai 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 97
Points : 61
Points : 61
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
pit9.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2007, 19h25   #2
Membre éclairé
 
Inscription : février 2005
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 349
Points : 358
Points : 358
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
overider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 09h39   #3
Membre du Club
 
Inscription : mai 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 97
Points : 61
Points : 61
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...
pit9.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 17h05   #4
Membre du Club
 
Inscription : mai 2004
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 97
Points : 61
Points : 61
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 :
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 :
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 :
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 :
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 :
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 :
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 :
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é
pit9.76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 20h59   #5
Membre éclairé
 
Inscription : février 2005
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : février 2005
Messages : 349
Points : 358
Points : 358
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.
overider est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h08.


 
 
 
 
Partenaires

Hébergement Web