Précédent   Forum du club des développeurs et IT Pro > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/12/2012, 10h43   #1
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 173
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 173
Points : 44
Points : 44
Par défaut problème de conception

Bonjour à tous,

Je viens vous voir car j'ai un pépin.

Une base déjà existante a pas mal d'enregistrements (plus d'un milliard).

Un autre serveur aura aussi ses enregistrements avec ses propres clés primaires. Pas de réplication possible.

Pour simplifier l'exemple, considérons deux tables :
table 1 => inscrit
table 2 => adresses

La table 2 contient l'id de la table 1 pour les jointures sur le champ id.

Idem sur l'autre serveur.

Alors trois idées sont venues :

1) sur le deuxième serveur où les données vont devoir être mergées, les clés primaires (id) auront une valeur très supérieure. Avantage : permet de s'en sortir pendant un temps mais si les id se rejoignent, c'est la fin des haricots.

2) se débrouiller pour que les id de chaques serveurs commencent par un chiffre, cela nous oblige à avoir 9 serveurs au max.

3) avoir un id de type texte s1-"id" pour le serveur 1 s2-"id" pour le serveur 2 etc. Ceci nous ferait perdre massivement en performance.

Je ne vois pas de solution pour ne pas être ennuyé avec les clés primaires lors de merge massifs. Le tout sans réplication (sinon je ne serais pas là).

Vous avez une idée qu'on n'aurait pas vue ? On ne peut plus changer de manière drastique les base. Un nouveau modèle ne peut pas être envisagé pour le moment.

Merci à vous,

LeHibou2
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 11h21   #2
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 671
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 671
Points : 25 524
Points : 25 524
Envoyer un message via MSN à CinePhil
Il faut ajouter une colonne identifiant le serveur d'où provient la donnée et l'inclure dans la clé primaire.

inscrit (ins_serveur, ins_id...)
adresse (adr_id_serveur, adr_id, adr_id_inscrit...)

On suppose ici que l'id du serveur de l'adresse est le même que l'id du serveur de l'inscrit.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 11h51   #3
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 173
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 173
Points : 44
Points : 44
C'est effectivement une excellente solution.

Cependant comment être sûr de trouver la ligne selon que l'on se connecte sur le serveur 1 ou 2 ?

Ca complique pas mal.


Autre solution : prévoir 100 milliards de lignes par serveur et commencer les id du serveur 2 à 200 milliards. etc...
Le merge ne pose plus de soucis comme ça.

100 milliards de lignes, c'est quand même pas mal. On peut aussi encore aller plus loin avec 1000 milliards de lignes.

Point de vue perf, cela restera correct, non ? Bien sûr un poil plus long que si on avait id=1, mais je ne pense pas que cela sera très problèmatique.

Un point que je ne soupçonne pas ?

Merci beaucoup,
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 12h03   #4
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 671
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 671
Points : 25 524
Points : 25 524
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par LeHibou2 Voir le message
C'est effectivement une excellente solution.

Cependant comment être sûr de trouver la ligne selon que l'on se connecte sur le serveur 1 ou 2 ?
Quel problème ?

Soit je sais que j'ai besoin de la ligne 124 du serveur 2, soit je cherche l'inscrit ayant pour login "LeHibou2" et c'est la requête qui me retournera par exemple l'identifiant {124, 2}.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 12h05   #5
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 173
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 173
Points : 44
Points : 44
N'est-ce pas plus long que de simplement chercher l'id dans la base ?

Je veux dire : id unique grâce à une plage d'id entre deux serveurs très large ?
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 12h20   #6
CinePhil
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 13 671
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 49
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 13 671
Points : 25 524
Points : 25 524
Envoyer un message via MSN à CinePhil
Dans les deux cas, c'est une recherche sur la clé primaire. C'est peut-être légèrement plus long avec deux colonnes mais pas sûr que ce soit significatif.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise la suite Linux Mageïa !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2012, 12h29   #7
LeHibou2
Membre du Club
 
Inscription : mai 2010
Messages : 173
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 173
Points : 44
Points : 44
Merci beaucoup Cinéphil,

On part donc sur deux solutions à creuser avec sérieux.

La réplication aurait permis de gagner pas mal de temps. Quoique sur du wan.. avec de la réplication master-master...
LeHibou2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h46.


 
 
 
 
Partenaires

Hébergement Web