Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration 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 11/04/2006, 16h24   #1
Membre à l'essai
 
Homme Pascal Bleuse
Développeur Web
Inscription : juin 2005
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Pascal Bleuse
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2005
Messages : 42
Points : 20
Points : 20
Par défaut Info optimisation

Bonjour à tous

Je dois mettre en place pour un site une base de donnée MySQL qui risque a plus ou moins long terme d'etre volumineuse (je pense 2 a 3 000 000 de lignes) sachant que le serveur et un 3500+ 2Go Ram Linux. (mais cela pourra évoluer)
Cette base sera souvent sollicité en lecture et ecriture puisque le site gerera des petites annonces. Elle est divisé en plus de 1700 catégories/sous catégorie (sur 4 niveaux).
N'ayant jamais traité de base aussi importante j'aurais aimé avoir votre avis sur les optimisations possibles.
Pour ma part je pensais procéder de la sorte. Faire une table par niveau pour avoir la hiérachie. L'annonce ayant l'index final, elle remonte l'arborescence logiquement.
Qu'en pensez vous? Peut etre qu'il vaut mieu créer une table par catégorie, mais a ce moment la l'index sera sur 4 niveaux.
De plus, en faisant des recherches avant de poster, j'ai lu que c'était plus le poid de la BDD que la quantité d'entré qui etait importante. Dans ce cas, je m'embète peut etre pour rien puisque chaque ligne ne pésera pas lourd.
Pour terminer, j'ai beaucoup vu le terme "découper la BDD" sans avoir trouvé de la doc ou des infos sur l'intéret et la facon de faire. Si vous avez des liens

Merci d'avance
padawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 16h48   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Bonjour,

Est-ce un serveur dédié MySQL ? Qui fait aussi office de serveur Web ?
Quelle est la charge prévue en nombre d'accès simultanés à la base ?

En ce qui concerne les catégories, ça me parait un peu bloquant de se limiter à 4 niveaux. Une vraie arborescence serait plus flexible, il y a plusieurs méthodes possibles.
http://www.developpez.net/forums/viewtopic.php?t=444820&highlight=arbre
http://www.developpez.net/forums/viewtopic.php?t=454306&highlight=arborescence
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 17h37   #3
Membre à l'essai
 
Homme Pascal Bleuse
Développeur Web
Inscription : juin 2005
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Pascal Bleuse
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2005
Messages : 42
Points : 20
Points : 20
Merci pour les liens.

Oui c'est un serveur dédiés avec MySQL, qui fait office d'hébergement web mais uniquement pour ce site. Donc toutes les ressources de la machine lui sont réservé.

Pour ce qui est des niveaus c'est imposés par le client selon ses rubriques.
Je suis en effet dans ce shema:



D'ailleurs l'article a l'air bien mais mon anglais est un peu limité donc je vais passer un peu plus de temps a l'analizer.

Sinon au sujet de la découpe, tu aurais quelque chose

Merci
padawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 19h45   #4
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Qu'appelles-tu "découper" une BDD ? Tu aurais un exemple ?
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 19h51   #5
Membre à l'essai
 
Homme Pascal Bleuse
Développeur Web
Inscription : juin 2005
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Pascal Bleuse
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2005
Messages : 42
Points : 20
Points : 20
Ben pas vraiment justement

J'ai vu ca a droite a gauche sans rien trouver de concret.
J'en ai entendu parler pour découper les tables genres de 0 a 10000 de 10001 a 20000 etc...(est ce vraiment utile?) ou aussi pour ne pas générer des fichiers trop lourd (genre pour ne pas avoir 1 fichier de 15Go), mais a ce moment la comment ca se gere

Bref beaucoup d'interrogation.

:
padawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2006, 19h55   #6
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
OK, il doit s'agir du partitionnement de tables.

C'est vrai que ça peut améliorer les performances, mais la fonctionnalité n'est disponible que sous MySQL 5.1, qui est encore en beta.
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2006, 06h34   #7
Membre expérimenté
 
Inscription : mai 2005
Messages : 414
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 414
Points : 589
Points : 589
Salut,

Si la cible est de 2 à 3 millions de lignes en tout c'est relativement faible.

Le partitionnement sera un plus mais généralement, je ne le considère que peu utile en dessous de 2 millions de lignes dans la table. Et encore c'est très arbitraire.

Donc il y a pas encore péril dans la demeure pour ta base.

Mais c'est à regarder quand même. Par contre, si tu as une table de 3 millions de lignes, partitionne pas en tranche de 10000 , au pire en 2, au max en 4 ou 5.

Autre conseil : essaie d'avoir des partitions équilibrées

Enfin, si y a urgence sur le partionnement : change de SGBD
gregory.broissard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 00h52   #8
Membre à l'essai
 
Homme Pascal Bleuse
Développeur Web
Inscription : juin 2005
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Pascal Bleuse
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2005
Messages : 42
Points : 20
Points : 20
Ok!

Merci bien.
Aprés avoir un peu étudier les techniques d'arborescences, j'ai donc décidé d'un commun accord avec moi meme de rester sur des tables séparés pour chaque niveau.
D'autant plus que le client en a fait sauté un ce qui n'en laisse plus que 3.
J'ai quand meme bien vu la gestion intervallaire qui m'a l'air trés puissante, trés facile a en comprendre le principe mais qui m'a l'air beaucoup plus lourde a mettre en place.
Surtout que je n'ai que les base en SQL (a vrai dire je pensais meme pas que c'était aussi pointu Je croyais que tout se passé par PHP Ca m'apprendra 8) )

Bref, voici un exemple de ma structure:



Le petit souci c'est que les annonces peuvent aussi ne dépendre que du 2e niveau, a savoir "categorie".
J'ai un peu de mal a modeliser ca sans passer par la rubrique
Dois je faire une table d'annonce séparé?

Une idée???

Merci
padawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 01h50   #9
Membre habitué
 
Inscription : février 2006
Messages : 118
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 118
Points : 116
Points : 116
Dans cette situation je crois que le plus simple c'est de faire 2 classes annonces.

Sinon tu peux aussi mettre 2 FK dans ta classe annonce et remplir celui qui convient mais je pense pas que ce soit terrible même si ça fonctionnerait.

---------------

Il y a aussi une autre solution qui serait de fusionner tes tables categorie et rubrique puis d'ajouter un attribut (id_pere) pour créer un lien père-fils au sein de cette table.

Dans ce cas, tous les enregistrements que tu considères actuellement comme des "rubriques" auraient l'attribut "id_pere" renseigné, ce qui permettrait de connaître à quelle catégorie appartient chaque rubrique. Si l'attribut n'est pas renseignée (null) alors c'est que tu aurais à faire à une catégorie.

La classe annonce resterait inchangée, mais la FK qu'elle contient désignerait soit une rubrique, si l'enregistrement correspondant dans la table fusionnée a une valeur pour id_pere, soit une categorie si id_pere est à null.

Après faut voir si ta base de données permet de faire des FK au sein d'une même table.

Voilà, bonne chance!
yizashi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 13h50   #10
Membre à l'essai
 
Homme Pascal Bleuse
Développeur Web
Inscription : juin 2005
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Pascal Bleuse
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2005
Messages : 42
Points : 20
Points : 20
Merci.

Moi aussi je ne pense pas que faire plusieurs table d'annonce soit une bonne idée.
J'avais aussi pensé a faire une seul table avec le parent enfant a l'intérieur, mais comme le client veut la possibilité de modifier les groupes, les categories et les rubriques a sa guise, cela risque de poser probleme. Car on peut tout aussi bien avoir un groupe qui n'a pas de categories.
Je pensais a ca sinon: créer une table intermédiaire qui contiendrai la relation entre l'annonce et son parent le plus proche. Une fois qu'on a ca on peut remonter facilement et le niveau importe peu.
Qu'en pensez vous?

Merci de votre aide
padawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 14h17   #11
Membre à l'essai
 
Homme Pascal Bleuse
Développeur Web
Inscription : juin 2005
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Pascal Bleuse
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2005
Messages : 42
Points : 20
Points : 20
Voici un exemple de ma dernière idée



padawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2006, 18h16   #12
Membre à l'essai
 
Homme Pascal Bleuse
Développeur Web
Inscription : juin 2005
Messages : 42
Détails du profil
Informations personnelles :
Nom : Homme Pascal Bleuse
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2005
Messages : 42
Points : 20
Points : 20
Je suis en train de penser qu'il serais peut etre inutile de passer par une table intermédiare, si je stocke directement le niveau dans l'annonce, non?
Serait ce moin performant?

padawa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web