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

Administration MySQL Discussion :

Partitionnement sur les 3 derniers mois


Sujet :

Administration MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien ES en informatique
    Inscrit en
    Août 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien ES en informatique

    Informations forums :
    Inscription : Août 2009
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Partitionnement sur les 3 derniers mois
    Bonjour à tous,

    Tout d'abord, je vous expose mon problème :

    Il s'agit d'une table qui contiendra environ 5'000'000 d'enregistrement par année, ces enregistrements seront conservés au minimum 10 ans (voir plus, ce n'est pas encore défini). On parle d'événements de machine de production. Je vais générer un rapport + un dashbord permettant de visualiser différentes informations (moyenne du nombre d’événement par 10min sur un mois par exemple, graphiques, ...) relativement complexe et on veut également visualiser les enregistrements eux-même. Les données visualisés seront en grand majorité sur les 2 derniers mois, la visualisation du reste des données doit toujours être possible mais la rapidité d'accès un moins importante.

    Je travaille sur une base de données MariaDB v10.1.12.

    L'idée était de faire une partition sur les 3 derniers mois. Je me rends compte maintenant que ce n'est pas si facile. Je n'ai pas trouvé de solutin pour faire cette partition, en effet, il est impossible de faire une partition basé sur un now() ou autre current_date(), etc même indirectement via colonne calculée ou autre.

    Avez-vous des idées à me proposer? Peut-être d'autre solution que cette partition.

    Merci d'avance.

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 380
    Points : 19 062
    Points
    19 062
    Par défaut
    Salut garkhan.

    A lire :
    --> http://krierjon.developpez.com/mysql/partitionnement/

    Citation Envoyé par garkhan
    L'idée était de faire une partition sur les 3 derniers mois.
    Pourquoi faire une partition sur trois mois ? Le plus simple est de faire une partition sur un seul mois.
    Vous avez comme critère le mois issu d'une quelconque date dans votre table.

    Citation Envoyé par garkhan
    il est impossible de faire une partition basé sur un now() ou autre current_date(), etc même indirectement via colonne calculée ou autre.
    Et pourquoi donc ?

    Normalement, votre requête sera basée sur un critère.
    Pourquoi ne pas utiliser ce même critère pour créer vos partitions ?

    Citation Envoyé par garkhan
    Avez-vous des idées à me proposer?
    Il faudrait que l'on sache exactement ce que vous voulez faire avec vos partitions. Essayez de d'écrire vos contraintes !
    Une partition, c'est juste une façon de découper une table en plusieurs fichiers physiques sur le disque dur.

    Citation Envoyé par garkhan
    Peut-être d'autre solution que cette partition.
    Vu la volumétrie, le mieux est de faire des partitions.
    Et rien ne vous empêche de mettre chaque partition sur des disques différents.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Il faut bien faire attention aux partitions, elles peuvent être plus pénalisantes qu'être un avantage. De plus il faut éviter les mouvements entre partitions, un enregistrement ne devrait pas avoir à changer de partition, c'est une opération lourde. Autre contrainte sur les partitions, le critère de la partition doit se retrouver dans chaque requêtes faîtes sur la table, en effet, une requêtes prenant en compte plusieurs partitions est plutôt lourde, généralement plus lourde que cette même requête portant sur une table identique non partitionnée et bien indexé.

    Et pour finir, 5 millions d'enregistrement n'est pas nécessairement une grosse table.

    La question est plus comment calculer rapidement les résultats à afficher. Il pourrait être intéressant d'envisager un fonctionnement à la BI, soit une deuxième base de donnée qui ferait l'effet d'un datawarehouse, avec des tables et des données spécifiquement calculées pour répondre à la demande de rapport. Il reste alors à mettre en place un mini ETL entre les deux bases (qui peuvent être sur des machines différentes pour des questions de performances) et la fréquence de rafraichissement.

    Si l'affichage doit être en temps réel il est toujours possible de créer les tables pré-calculée en temps réel sur le même serveur et de les mettre à jour avec soit avec des triggers, soit à l'aide d'events. Il conviendra, alors, de rajouter une tâche de nettoyage de ces tables intermédiaires qui passerait régulièrement.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

Discussions similaires

  1. Réponses: 13
    Dernier message: 06/08/2014, 10h07
  2. Réponses: 0
    Dernier message: 23/03/2010, 11h45
  3. Réponses: 7
    Dernier message: 09/10/2008, 15h18
  4. [Requette] les 12 derniers mois seulement
    Par bob75000 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2006, 13h48
  5. Réqueter sur les dates du mois précédent.
    Par Bigdeal dans le forum Access
    Réponses: 4
    Dernier message: 08/07/2006, 13h11

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