|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Bonjour à tous
Est-ce que c'est possible de créer des sortes de paritions (Par date) sur une table à l'aide de MySQL. Ou quelques chose de similaire... J'ai 16 millions d'entrées par mois dans une table et j'aimerais la partionner. Merci. |
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : juin 2003 Messages : 4 893 ![]() |
Je n'ai pas très bien compris ta question
Si tu veux seulement récupèrer une partie des enregistrements il suffit d'utiliser "LIMIT" ou bien de poser tes conditions dans la clause "WHERE"
__________________
Modérateur PHP |
|
|
00
|
|
|
#3 |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Pas tout à fait...
C'est comme séparer l'information d'un gigantesque table. À peu près comme un disque dur. Donc on créer une partition afin de séparer les données selon un critère comme par exemple des interval de date. Exemple sous SQL 2005: http://www.sqlskills.com/resources/W...0Beta%20II.htm Je sais que cela se fait aussi sous Oracle. MySQL a-t-il un système similaire ? |
|
|
00
|
|
|
#4 |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Re-bonjour.
Pour donner un peu plus d'informations sur la table en question. La table est consitué de trois champs comme clé primaire Primary key [ Date_Entry, Station_ID, SensorID, SensorValue ) Donc, pour les types c'est (DateTime, Int, Int, Float ). Est-ce que ce serait une solution de créer une table pour chaque mois de l'année ? (Emmerdant mais quand même cela résoudrait le problème relié aux performances décevant, quand je récupère un bloc de données situé entre deux mois d'une année données ou simplement lorsque je veux connaître le MIN et MAX des mois situé entre deux années). J'attend vos commentaires. Merci |
|
|
00
|
|
|
#5 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Ce système de partitionnement existe aussi sous DB2 (tablespace), mais je n'ai pas vu d'équivalent sous MySQL: cette notion de tablespace renvoie à la définition (allocation) de ressources physiques (HD) pour le stockage des tables (=storage group sous DB2).
Cependant, cette notion de partitionnement de tables est valable pour des segments prédéfinis de valeurs de clé: - clés de 1 à 100 => partition 1 - clés de 101 à 200 => partition 2 - etc.... dans ton cas, ces segments sont "mouvants", à cause de la date qui croit sans cesse...
__________________
"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
|
|
|
#6 |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Alors existe-t-il une solution à mon problème ? Car 5 millions d'enregistrements par mois, au bout de 6 mois ce sera catastrophique d'extraire un mois de données de cette table
|
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
1 table par Station_id, si le nombre est raisonnable ?
__________________
"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
|
|
|
#8 |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Bonjour, merci pour votre aide, c'est apprécié
Des Applications qui possède 1 ou plusieurs stations. Donc des stations il peut y en avoir facilement 300 et + qui projettent chacune 200 entrées environ par jour. Une station possède un ID qui est linké (relation) avec un application ApplicationsStation = (Station_ID, Application_ID), donc la solution proposé (1 table par station n'est pas réalisable/possible.) Merci. |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Il y aurait peut-être une solution basée sur une ou plusieurs procédures stockées:
tu sollicites 1 PS pour faire les inserts. cette PS, en fonction des données qui lui arrivent, décide de la table où ces données doivent atterir... L'algo est à trouver, mais l'idée est que: si la table existe, on y insère les données, si elle n'existe pas, une nouvelle table est créée. L'algo en question doit donc "peser" la future clé afin de définir le meilleur endroit de stockage. On implémente ici une sorte de partitionnement automatique... Qu'en penses-tu ?
__________________
"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
|
|
|
#10 |
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Bonjour qi130
Donc, ta solution ressesmble de très près à celle que je propose qui est de créer une table pour chaque mois... (5 millions d'enregistrement par mois) Mais j'ai lu quelque part que les procédures stockées sous MySQL ne serons pas exécutée plus rapidement comparé aux autres SGBD comme MSSQL. Les procédures stockés ne sont pas sauvegardées dans le SGBD comme étant une procédure, mais seulement reçues comme, via une requête... Petite question comme ça, comment fait-on pour récupérer la liste des tables existantes sous MySQL ? Merci. |
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Pour la liste, c'est par là : http://dev.mysql.com/doc/mysql/fr/show-tables.html
__________________
"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
|
|
|
#12 | ||
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
Une procédure stockée est par définition stockée sur le serveur. Les SP de MySQL ne dérogent pas à la règle... Citation:
La question mérite d'être posée et des tests d'être réalisés
__________________
Pensez au bouton
|
||
|
|
00
|
|
|
#13 | |||||
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Citation:
Code :
Pour les procédures stocké, je suis désolé si je me suis trompé, j'avais lu ça d'un post sur Expert Exchange's, Je n'ai pas trouvé comment et où sont stocké les procédures stockés sous MySQL Merci pour votre aide. |
|||||
|
|
00
|
|
|
#14 |
|
Membre à l'essai
![]() Inscription : décembre 2004 Messages : 23 ![]() |
En théorie, il est possible de distribuer une table sur plusieurs emplacements en utilisant l'option RAID TYPE. Pour ma part, je ne l'ai jamais utilisée, ni ne connais de personne l'utilisant. Dans le même genre, il est également possible de stocker les index et/ou les données de chaque table dans des dossiers séparés. (option "DATA DIRECTORY" de CREATE TABLE)
Mais avant toute chose, pourquoi souhaites-tu stocker la table dans différentes partitions ? est-ce pour des questions de taille (table plus grande que le disque dur) ou de rapidité ? Dans le second cas je ne suis pas sûr qu'il y ait grand-chose à y gagner... Autre chose, de quelle(s) manière(s) tes requêtes utilisent-elles le champ Date_Entry ? selon l'utilisation que tu en fais, tu pourrais remplacer ce type de champ par un champ INT tout simple, contenant un timestamp UNIX pour représenter la date. La solution est valable si tu accèdes aux données de façon linéaire et que les dates sont comprises entre 1970 et 2037 (à peu près), par exemple:
Autre chose, y a-t'il d'autres champs que les quatre que tu as cité ? |
|
|
00
|
|
|
#15 |
|
Membre à l'essai
![]() Inscription : décembre 2004 Messages : 23 ![]() |
Je viens de relire le dernier post, qu'est-ce que le champ DataLogger_ID ? J'ai également oublié de demander quels index étaient défini pour la table, il y a de fortes chances qu'ils soit mal définis ou mal utilisés (cas le moins probable) par MySQL. Vérifie avec EXPLAIN que les bons indices sont utilisés.
|
|
|
00
|
|
|
#16 | ||
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Citation:
Dans le premier cas MySQL est un excellent choix, dans le deuxième il vaut mieux y réfléchir. Citation:
__________________
Pensez au bouton
|
||
|
|
00
|
|
|
#17 | ||||||||||
![]() Développeur informatique Inscription : octobre 2003 Messages : 487 ![]() |
Merci à vous deux.
Voilà pour la création de la table. Code :
Code :
En même temps j'en profite pour vous demander si c'est possible de regrouper les valeurs (AVG) en BLOC de 4h ? Ex: Voilà la requête qui me sort mes enregistrement pour 1 mois donné Code :
Code :
Code :
|
||||||||||
|
|
00
|
|
|
#18 | |||||||||||
|
Membre à l'essai
![]() Inscription : décembre 2004 Messages : 23 ![]() |
Quelques remarques, dans l'ordre:
Citation:
Code :
ALTER TABLE dataloggerssensorsvalue. ROW_FORMAT=FIXED Citation:
Code :
GROUP BY FLOOR(DATE_FORMAT(Date_Entry, '%H') / 4) Code :
SELECT * FROM DataLoggersSensorsValues WHERE (DataLogger_ID = 4) AND (Date_Entry BETWEEN '2004-02-01 00:00:00' AND '2004-03-01 00:00:00') Citation:
Code :
Code :
ALTER TABLE dataloggerssensorvalues ADD INDEX logger_by_date (Sensor_ID, Entry_TS)
Pour récupérer les moyennes de chaque jour du mois de février 2004 par tranche de 4 heures, on peut donc utiliser: Code :
Code :
Code :
Une dernière note: tout n'a pas été testé donc quelques typos peuvent subsister. |
|||||||||||
|
|
00
|
|
|
#19 |
|
Membre à l'essai
![]() Inscription : décembre 2004 Messages : 23 ![]() |
Au fait, si tu as toujours des problèmes de performances, poste les requêtes problématiques avec le tableau EXPLAIN qui va avec.
|
|
|
00
|
|
|
#20 | |
|
Expert Confirmé Sénior
![]() ![]() Pierre Ingénieur qualité méthodes Inscription : mars 2003 Messages : 3 726 ![]() |
Citation:
Chapeau bas ! euh tu maitrises d'autres trucs que MySQL ?
__________________
"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