|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Bonjour à tous.
Je travail sur un projet qui est responsable de récupérer des valeurs de capteurs pour des stations. Je peux avoir jusqu'à 32 capteurs par station et actuellement nous disposons de 20 stations et cela augmentet toujours. Les données doivent être organisées/classées par Date et par Station. Ce matin après un COUNT sur ma table j'ai obtenu : 4 687 271 valeurs. Et croyez moi juste faire un COUNT c'est long ! Encore pour cette table : - Data length : 201.8 MB - Index length : 323.1 MB Déjà près de 5 milions et cela pour un an alors j'imagine que dans 2-3 ans ce sera énorme ! J'utilise le moteur InnoDB car dans certains cas j'ai besion d'utiliser les transactions. En passant, j'utilise la version MySQL v5.0. Voilà la définition de ma table : Code :
Est-ce que ma table est mal définit ou simplement que j'arrive aux limites de MySQL ou voir même d'une base de données tout simplement ? Si j'ai atteins les limites alors serait-il mieux de gérer tout cela avec un arborescence de fichires sur disque dur (classé par station/année/mois) ? Merci beaucoup pour vos précieux conseils.
__________________
|
||
|
|
00
|
|
|
#2 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Code :
KEY `ssv_DateEntry_StationID_IDX` (`ssv_DateEntry`,`ssv_StationID`), Sur quel type de serveur tourne la base ? Peut-on avoir un exemple de requête lente ?
__________________
Pensez au bouton
|
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
La colonne `ssv_DateEntry` ne devrait pas faire partie à la fois d'une clé primaire et d'une clé index.
edit : Arf grillé...
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
SAns te promettre une amélioration quelconque:
- as-tu besoin de 4 octets pour mémoriser ssv_StationID ? - idem pour ssv_SensorID ? - as-tu besoin de la partie "time" de la date ? (plusieurs mesures par jour pour 1 même station ?)
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#5 | ||||||
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Le serveur est un Pentium 4 Hyperthread avec 1Go de RAM.
Voilà un exemple de requête qui me donne la liste de points nécessaires pour bâtir une courbe graphique des valeurs moyennes pour une station, un capteur et un mois précis : Code :
Code :
Code :
__________________
|
||||||
|
|
00
|
|
|
#6 | ||
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Déjà chaque enregistrement de ta table a une longueur fixe, c'est une bonne chose.
Par contre tu dis avoir pour l'instant 20 stations et que cela va augmenter. Je trouve qu'un INT(11) est un peu grand. De même pour tes capteurs. Si tu as 1000 capteurs par stations et 1000 stations, cela ne fait qu'un million. Hors INT(11) te donne 4 milliards. Pour vérifier les valeurs maximales déjà présente ne dépassent pas mes préconisations , je te suggère cette requête : Code :
Données 49 152 Octets Index 32 768 Octets Total 81 920 Octets Edit encore grillé par qi130 cette fois... C'est la fête
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Tiens, les 2 liens que j'ai utilisé au passage
11-5 capacité des colonnes 11-1-1 Présentations des types de colonnes numériques
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
00
|
|
|
#8 | |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
Peux-tu nous montrer ce que donne un EXPLAIN des requêtes ? Un SHOW VARIABLES ? (oui je sais je suis exigeant
__________________
Pensez au bouton
|
|
|
|
00
|
|
|
#9 | |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Citation:
__________________
|
|
|
|
00
|
|
|
#10 | |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Citation:
Effectivement j'ai besion de la partie TIME pour la date puisqu'un capteur donne une valeur à chaque ~5 min.
__________________
|
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Si le gain de places est intéressant, et vu le nombre de lignes que cela génèrent, essayez d'utiliser un timestamp en ce cas.
Par contre, j'aimerais vraiment avoir vos résultats. Ce sera possible de nous les noter car mon test m'inquiète ?
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
00
|
|
|
#12 | |||||||
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Citation:
Voilà un EXPLAIN pour la requête #1 : Code :
Code :
Code :
__________________
|
|||||||
|
|
00
|
|
|
#13 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Je pense qu'au niveau des index on ne pourra pas faire mieux.
La marge de manoeuvre se situe effectivement dans la taille des colonnes et dans les réglages serveur. Pour ça un SHOW VARIABLES serait utile afin de voir ce qui peut être paramétré.
__________________
Pensez au bouton
|
|
|
00
|
|
|
#14 | |||||
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Citation:
Code :
Question comme ça, avez-vous déjà eu un projet similaire ? Autant de données ? Autre chose, j'utilise le logiciel MySql Front et par conséquent je créer mes table à l'aide du GUI. Dans la précédante déclaration de ma table j'ai remarqué ces deux lignes : Code :
__________________
|
|||||
|
|
00
|
|
|
#15 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
"have_bdb";"YES" => si tu n'as pas de tables de type BDB tu peux le désactiver avec l'option skip_bdb
"innodb_buffer_pool_size";"75497472" => Peut être augmenté à plusieurs centaines de mégas sans problème (procède par paliers) "query_cache_size";"0" => peut être très utile dans un environnement OLAP lorsque les requêtes exécutées sont souvent les mêmes et que les données changent peu. On peut le paramétrer à plusieurs dizaines de mégas, ça dépend de la taille des jeux de résultats qu'on veut garder en cache.
__________________
Pensez au bouton
|
|
|
00
|
|
|
#16 |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Merci pour les conseils
Si je m'organise pour ne pas utiliser les transaction et que je passe sous MyIsam ? Est-ce que je pourrais gagner suffisament ?
__________________
|
|
|
00
|
|
|
#17 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Autre idée (sans préjugé de la façon dont MySQL travaille): L'utilisation de BETWEEN pour les dates ne serait-elle pas préférable à la double comparaison ?
De plus, pour les requètes #1 et #3, tu fais appel à une fonction (AVG) qui peut expliquer la lenteur, surtout à la lumière des volumes évoqués. Ceci dit, je serais bien en peine de proposer une solution de rechange sans sortir l'artillerie lourde
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
00
|
|
|
#18 | |||
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Citation:
Que veux-tu dire par artillerie lourde ? Un gars qui travail avec moi dit que ce serait mieux de créer des fichiers sur disque dur selon un arborescence : Exemple : Code :
Êtes-vous d'accord avec son principe ?
__________________
|
|||
|
|
00
|
|
|
#19 | |
|
Membre Expert
![]() Inscription : mai 2002 Messages : 1 022 ![]() |
Citation:
Crée une copie de ta table en myIsam, copie les données par insert select et mesure les requêtes. Autre idée, je suppose que tes données s'insère chronologiquement, donc que tes données sont triées selon le premier champ de la clef primaire. Il me semble (j'en suis quasi certain) qu'on peut informer la base de cela. Du coup l'index est simplifié et moins lourd... Je suis désolé, je ne peux pas effectuer ces dernières recherches ce soir sinon je serais en retard.
__________________
Alexandre T. PHP5/MySQL5 Codes prêts à l'emploi 30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc... Mes articles |
|
|
|
00
|
|
|
#20 | |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Citation:
garder quelque part le nb de mesures et le cumul des valeurs (organisés par AAAA-MM/station/capteur), et mettre à jour ces valeurs lors de l'arrivée de nouvelles données via un trigger par exemple. Ainsi, tu aurais immédiatement dispo ce qui est utile pour calculer cette moyenne: cumul/nb_de_mesure => 1 seule ligne à lire Le gros du boulot étant fait au fil de l'eau de manière "indolore" (à la réflexion, c'est pas si lourd que ça, non ?)
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet) ----------------------- Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MPUsus magister est optimus |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com