IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Décisions SGBD Discussion :

Quelle base de données pour une table très volumineuse ?


Sujet :

Décisions SGBD

  1. #1
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 327
    Points : 127
    Points
    127
    Par défaut Quelle base de données pour une table très volumineuse ?
    bonjour,
    j'ai une table de 10milion de ligne qui ne contient que des nombre avec 5chifre après la virgule pour générer des statistique,

    actuellement j'utilise mysql mais quand j’essaye de faire un select MAX ou MIN ça retourne des valeur totalement fausse donc je veux migrer vers une base de donnée plus adapté au table volumineuse mais je ne sais pas la quelle?

    ce que je veux faire exactement
    -la table existe déjà donc pas trop de insert juste quelque ajout par mois
    -je veux des select max et min très pertinent avec clause where ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select *,MAX(haut) from matlab;
    select *,MAX(haut) from matlab where pivot>1.35426;
     
     
    select *,MIN(bas) from matlab;
    select *,MIN(bas) from matlab where pivot>1.35426;
    -je veux faire des count plusieur fois par seconde
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(haut) AS haut FROM matlab WHERE haut=1.24368;

    UN GRAND MERCI D'AVANCE

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par bailamos Voir le message
    actuellement j'utilise mysql mais quand j’essaye de faire un select MAX ou MIN ça retourne des valeur totalement fausse donc je veux migrer vers une base de donnée plus adapté au table volumineuse mais je ne sais pas la quelle ?
    Je veux bien entendre que MySQL n'est pas le SGBD le plus performant du monde, mais qu'il soit faux sur des MIN et des MAX, ça je n'y crois pas vraiment.
    Surtout quand je vois les requêtes que vous avez écrites, qui elles n'ont pas de sens : c'est le problème de MySQL, il accepte des syntaxes boiteuses et essaie de s'en sortir.
    Il suffit également d'indexer les colonnes haut et bas pour avoir des résultats rapides sur les opérations MIN / MAX.

    Donc commençons par corriger vos requêtes, mettons les bons index et voyons si le besoin de migration est nécessaire.
    Pour ce faire, il faut la structure de votre table, quelques lignes de données, et ce que vous voulez en faire.

  3. #3
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 327
    Points : 127
    Points
    127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *,MAX(haut) FROM matlab;
    SELECT *,MAX(haut) FROM matlab WHERE pivot>1.35426;
     
    SELECT *,MIN(bas) FROM matlab;
    SELECT *,MIN(bas) FROM matlab WHERE pivot>1.35426;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    matlab
     
    pivot,haut,bas,g,d
    1.12345,1.12349,1.12342,1.12344,1.12346
    1.12348,1.12345,1.12344,1.12345,1.12336
    .......................
    il y'as 10 million de ligne et le min max et totalement faux peut etre que il ne parcourt pas toute la table

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Vous avez lu trop vite mon message : vos requêtes SQL sont fausses.

  5. #5
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 327
    Points : 127
    Points
    127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT MAX(haut) as haut FROM matlab;
    SELECT MIN(bas) as bas FROM matlab;
    même avec ça ça donne le même résultat!!!!!!!!!!!!!!!!!!!!!!

    Merci

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Peut on voir le DDL de la table ?
    Quelle est le type de donnée des colonnes bas et haut ?

  7. #7
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 327
    Points : 127
    Points
    127
    Par défaut
    tous les champs de la table sont de type float

    merci

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Merci de fournir un script permettant de monter un jeu de test (create table + insertion de données qui permettent de reproduit l'erreur).

    En tout cas, je plussoie Waldar : MySQL est pourri, mais peut-être pas à ce point.
    On ne jouit bien que de ce qu’on partage.

  9. #9
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 327
    Points : 127
    Points
    127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE `statistique`.`matlab` (
    `pivot` float NOT NULL ,
    `haut` float NOT NULL ,
    `bas` float NOT NULL ,
    `g` float NOT NULL ,
    `d` float NOT NULL ,
    ) ENGINE = MYISAM DEFAULT CHARSET = ascii;
    l'ajout a été fait a l'aide de bigdump

    merci

  10. #10
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Quand vous exécutez ces deux requêtes, qu'obtenez-vous ?

    Citation Envoyé par bailamos Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT MAX(haut) as haut FROM matlab;
    SELECT MIN(bas) as bas FROM matlab;
    Et quelles sont les valeurs que vous avez dans votre table qui vous font dire que c'est faux ?

    Sinon, pour en revenir à nos moutons initiaux :
    - Vos requêtes initiales (mélange de select *, de max() sans group by) sont complètement fausses. Fonctionnellement (donc en langage humain) qu'essayez-vous de sélectionner ?
    - Avez-vous mis un index sur les tuples "pivot, max" et "pivot, min" ?

    Comme SGBD qui tiennent très bien la charge, n'acceptent pas vos requêtes initiales, mais vous retourneront des données justes quelle que soit la situation, il y a Oracle et SQL Server. Les deux existent en version gratuites, dont les limitations sont rarement bloquantes.
    Autre alternative, PostreSQL, qui est pas mal du tout, mais qui tiendra bien moins la charge... mais ce sera toujours mieux que MySQL.
    A la limite, vous auriez pu prendre ACCESS ça aurait été de toute façon mieux que MySQL.
    On ne jouit bien que de ce qu’on partage.

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    De plus, vous avez mal typé vos données.
    FLOAT n'est pas utile pour ce besoin, utilisez le type DECIMAL.

  12. #12
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Sinon, j'ai juste un truc à dire à propos des FLOAT.

    Évitez-ce type (de merde pour rester poli) comme la peste.
    Ce type, aussi rapide soit-il pour les calculs (rendu 3D par exemple) est une mine d'erreurs.

    En effet en FLOAT, des tas d'erreurs de calcul se produisent, surtout si on commence à taper dans les décimales. En effet, 1 + 1 en float, ça fait pas 2, mais un truc du genre 1.999994 ou 2.000006
    Je me demande, vu que vous avez 6 décimales, si votre problème vient pas de là.

    Votre pivot > 1.35426 sélectionne éventuellement aussi les lignes où pivot = 1.35426, voir même 1.35425
    Entre 2,00001 et 2,00002 parfois FLOAT ne permet pas de faire la différence... Donc peut-être que MAX() retourne à tord 2,00001 au lieu de 2,00002

    Essayez donc de transformer vos colonnes en type DECIMAL en précisant bien la précision.

    Ce type travaille avec des valeurs exates, et non une approximation comme le fait FLOAT. Peut-être cela résoudra-t-il votre problème.

    Si vraiment ça vous pose problème d'abandonner la virgule flottante (performances notamment) essayez éventuellement DOUBLE au lieu de FLOAT, la précision sera meilleure, et peut-être les résultats aussi !

    -- Edit : le type est DECIMAL et non NUMERIC
    On ne jouit bien que de ce qu’on partage.

  13. #13
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Pour ce faire, il faut la structure de votre table, quelques lignes de données, et ce que vous voulez en faire.
    Citation Envoyé par skuatamad Voir le message
    Peut on voir le DDL de la table ?
    Quelle est le type de donnée des colonnes bas et haut ?
    Citation Envoyé par StringBuilder Voir le message
    Merci de fournir un script permettant de monter un jeu de test (create table + insertion de données qui permettent de reproduit l'erreur).
    Citation Envoyé par StringBuilder Voir le message
    Et quelles sont les valeurs que vous avez dans votre table qui vous font dire que c'est faux ?
    Ou comment perdre votre temps et faire perdre le temps de ceux qui veulent vous aider en ne répondant pas aux questions... Si on vous demande la structure de votre table et un jeu de données ce n'est pas juste pas curiosité, c'est parce que c'est nécessaire pour apporter efficacement une réponse à votre problème.

  14. #14
    Membre habitué
    Inscrit en
    Février 2007
    Messages
    327
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 327
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par FSiebert Voir le message
    Ou comment perdre votre temps et faire perdre le temps de ceux qui veulent vous aider en ne répondant pas aux questions... Si on vous demande la structure de votre table et un jeu de données ce n'est pas juste pas curiosité, c'est parce que c'est nécessaire pour apporter efficacement une réponse à votre problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE `statistique`.`matlab` (
    `pivot` float NOT NULL ,
    `haut` float NOT NULL ,
    `bas` float NOT NULL ,
    `g` float NOT NULL ,
    `d` float NOT NULL ,
    ) ENGINE = MYISAM DEFAULT CHARSET = ascii;
    l'ajout a été fait a l'aide de bigdump

    merci
    ??????????????

  15. #15
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Vous ne comprenez pas mon message alors qu'il a quand même fallu demander 3 fois avant d'avoir la structure et que même là vous n'avez pas fourni de jeu de données ?
    C'est dommage de faire perdre le temps de tout le monde y compris le vôtre (une question bien posée trouve une réponse plus rapidement) non ?

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    L'essentiel étant d'y voir plus clair maintenant, ce qui est fait.
    bailamos, pouvez-vous changer la structure de votre table et la re-remplir ?

Discussions similaires

  1. Conception d'une base de donnée pour une banque
    Par simo1050 dans le forum Modélisation
    Réponses: 3
    Dernier message: 07/11/2007, 16h34
  2. Quelle Base de données pour une application en Java
    Par Feysal dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 01/06/2007, 21h05
  3. Réponses: 5
    Dernier message: 09/02/2007, 09h09
  4. Quelle Base de Données pour gérer des documents multimédia ?
    Par Doudy dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 21/01/2007, 20h52
  5. Quelle base de données pour un emploi du temps
    Par edouard21 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 26/10/2005, 22h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo