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

MySQL Discussion :

Table énorme, comment gérer ?


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2017
    Messages : 13
    Par défaut Table énorme, comment gérer ?
    Bonjour,

    Je vais ajouté une table candidature sur mon site internet mais je n'arrive pas à la modéliser.
    Si j'ai plus de 5 millions d'utilisateurs sur le site et qu'ils déposent plus d'une dizaine de candidatures, je vais vite me retrouver avec une table énorme (plus de 50 millions de lignes).

    Il est vrai que je pars dans les extrêmes avec mes chiffres mais je préfère demander avant de concevoir cette table ... Je pense que c'est le nombre de lignes qui m'inquiète par rapport à la performance.
    Comment concevoir cette table de façon optimale ? Faut-il historiser dans une autre table les candidatures dont le recrutement est terminer ? Ou est-ce que 50 millions de lignes c'est rien en terme de performance ?

    Pouvez-vous me faire partager vos expériences pour des situations similaires ?

    Merci pour vos réponses.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    50 millions de lignes dans une table MySQL sur un serveur bien dimensionné, ça ne devrait pas poser de problème... à condition que la table (et les autres) soit correctement modélisée, indexée et que son utilisation par l'application soit optimisée.

    Si vous nous montrez la structure de votre table et celle des tables associées, on pourra déjà vous donner un premier avis.

    Ensuite, si votre application interroge la table 3 fois au lieu d'une à chaque demande de l'internaute, ça risque fort de réduire la performance de l'application.


    À titre d'exemple, j'ai développé une base de données il y a 10 ans à partir de données issues du répertoire national des bovins. Il y avait une table de 65 millions de lignes et plusieurs autres de plusieurs millions à plusieurs dizaines de millions de lignes. Temps de réponse de toutes les requêtes, parfois un tantinet complexe puisque nous faisions des statistiques avec, sur un serveur de l'époque, pas particulièrement puissant : inférieur à la seconde.

    Par contre, avec une base données mal faite et une application qui n'optimise pas non plus son utilisation, on peut avoir des problèmes à partir de quelques centaines de milliers de lignes.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2017
    Messages : 13
    Par défaut
    Merci CinePhil,

    Au sujet des autres tables de ma base, il n'y a pas problème, choix des types de colonnes optimisées, choix des index dans les tables, pas de duplication des données dans plusieurs tables, limitation des grosses tables (préférence pour le découpage en petites tables et les jointures), etc...

    Votre réponse me conforte déjà mais j'ai une idée qui me trotte dans la tête pour soulager la table ... Mais je ne suis pas sûr que cela soit très catholique !

    Lorsqu'une candidature est considérée terminée :
    1 je la stock dans la table historique plutôt que de la laisser dans la table candidature.
    2 je vide ensuite la ligne de la candidature terminé dans la table candidature sauf la colonne id (auto incrément). Du coup je me retrouve avec une ligne vide est dispo pour faire une nouvelle insértion.
    3 Du coup dès qu'une nouvelle candidature est déposé, elle prend l'emplacement vide dans la table candidature et évite ainsi la création d'une ligne supplémentaire.

    C'est tiré par les cheveux, mais cela évite d'avoir une table avec du volume.
    Avez-vous un avis sur la question ?

    Merci.

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Citation Envoyé par nniikkoo Voir le message
    2 je vide ensuite la ligne de la candidature terminé dans la table candidature sauf la colonne id (auto incrément). Du coup je me retrouve avec une ligne vide est dispo pour faire une nouvelle insértion.
    3 Du coup dès qu'une nouvelle candidature est déposé, elle prend l'emplacement vide dans la table candidature et évite ainsi la création d'une ligne supplémentaire.
    C'est une très mauvaise idée, c'est le SGBD qui s'occupe de gérer l'écriture sur disque.
    Si de la place a été libérée par un DELETE, le SGBD peut réutiliser cet espace de lui même, pas besoin d'usine à gaz à base de je conserve l'ID et je vais tenter de le réutiliser plus tard.

    Pour de l'archivage, il y a aussi le partitionnement :
    Partitioning Types
    RANGE Partitioning

  5. #5
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2017
    Messages : 13
    Par défaut
    Merci skuatamad pour les précisions.
    Finalité de l'histoire, il n'est pas nécessaire de vouloir réinventer la poudre à canon. Il est préférable de faire simple.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 16 818
    Billets dans le blog
    14
    Par défaut
    On ne doit jamais réutiliser un identifiant auto-incrémenté ! On s'en fout s'il y a des trous dans la numérotation parce que ce numéro n'a aucune signification.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 !

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par nniikkoo Voir le message
    1 je la stock dans la table historique plutôt que de la laisser dans la table candidature.
    Ca dépend de l'utilisation que vous faites des candidatures, échues ou non, dans vos différents traitements.
    Un statut de la candidature peut suffire, avec l'avantage de permettre plus de combinaisons que simplement terminé O/N et même un retour arrière le cas échéant

    Citation Envoyé par nniikkoo Voir le message
    2 je vide ensuite la ligne de la candidature terminé dans la table candidature sauf la colonne id (auto incrément). Du coup je me retrouve avec une ligne vide est dispo pour faire une nouvelle insértion.
    Sauf que "vider une ligne" n'existe pas
    En SQL les ordres valides sont soit DELETE qui supprime toute la ligne, donc "sauf la colonne ID" ne veut rien dire, soit UPDATE qui modifie tout ou partie des colonnes.

    Citation Envoyé par nniikkoo Voir le message
    3 Du coup dès qu'une nouvelle candidature est déposé, elle prend l'emplacement vide dans la table candidature et évite ainsi la création d'une ligne supplémentaire.
    Non : l'affectation de l'emplacement physique des lignes lors d'un ajout est géré par le SGBD en fonction de nombreux paramètres dont l'utilisateur ne doit pas se préoccuper.
    Rien ne garantit que la nouvelle ligne prendra le même emplacement physique que la ligne précédemment supprimée, mais de toutes façon peu importe l'emplacement physique, le principe d'un SGBD relationnel est justement de garantir l'indépendance entre la couche physique (emplacement des lignes notamment) et la couche logique
    cf. les 12 règles de Codd ici

  8. #8
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 218
    Billets dans le blog
    16
    Par défaut Champs de colonnes...
    Citation Envoyé par escartefigue Voir le message
    cf. les 12 règles de Codd ici
    Capitaine,

    En ce qui concerne Wikipedia en anglais, en attendant qu’un farfelu vienne ficher la patouille, ce qu’on y trouve à ce jour est la copie conforme de ce qu’a écrit Codd. Par contre, évite de renvoyer à Wikipédia en français, pour tout ce qui touche au modèle relationnel de données de Codd, c’est trop souvent du charabia, donc inintelligible, c’est truffé d’âneries, d’erreurs. Pour ma part, j’ai renoncé à y rétablir la clarté et la vérité... En ce qui concerne les 12 règles de Codd, en français, fais référence à ce qu’en dit SQLpro dans son blog ou encore moi-même, dans le mien.

    Exemple, dès la règle 1, on trouve ceci dan Wiki :

    « Toute l'information dans la base de données est représentée d'une et une seule manière, à savoir par des valeurs dans des champs de colonnes de tables ».

    Le rédacteur a oublié de qualifier la base de données, à savoir relationnelle. Les base de données navigationnelles ou orientées objet, voire XML, ne sont pas astreintes à respecter la règle.

    Pour toi, que sont des champs de colonnes de tables ? Sont-ce des champs où l’on fait pousser des colonnes de tables ? (à l'instar de celles de Buren, qui ont poussé dans la cour d’honneur du Palais-Royal et la dénaturent ). J’aimerais avoir l’avis de CinePhil qui ne rate pas ceux qui parlent de champs de tables !

    Toutes choses égales quant aux autres règles.

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 624
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Capitaine,

    Pour toi, que sont des champs de colonnes de tables ?
    Effectivement, je fais moi même souvent la remarque concernant les champs et autres termes inadéquats concernant les SGBD-R, bien vu

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 002
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Pour toi, que sont des champs de colonnes de tables ? Sont-ce des champs où l’on fait pousser des colonnes de tables ? (à l'instar de celles de Buren, qui ont poussé dans la cour d’honneur du Palais-Royal et la dénaturent ). J’aimerais avoir l’avis de CinePhil qui ne rate pas ceux qui parlent de champs de tables !

    Toutes choses égales quant aux autres règles.
    Rudi Bruchez et moi même en avions mare de devoir recadrer la terminologie avec des foutaises de "champs" et d'"enregistrement".... Alors je ms suis coller à la littérature et j'ai trouvé dans Chris Date mon bonheur….
    "
    SQL and Relational Theory: How to Write Accurate SQL Code, 3rd Edition
    "

    Il y parle clairement de l'imbécilité d'une terminologie vaseuse !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème pour créer une table
    Par zyriuse dans le forum Installation
    Réponses: 11
    Dernier message: 16/11/2007, 11h26
  2. Réponses: 1
    Dernier message: 01/11/2006, 17h36
  3. aide pour créer une base
    Par irnbru dans le forum Débuter
    Réponses: 3
    Dernier message: 19/09/2006, 18h03
  4. aide pour créer une faq sur inno setup
    Par fsx999 dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2006, 20h16
  5. [FLASH MX2004] Aide pour créer une animation
    Par SnakeTales dans le forum Flash
    Réponses: 5
    Dernier message: 04/08/2005, 10h50

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