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

PostgreSQL Discussion :

PostgreSQL 10 : un véritable support pour le partitionnement de table sera implémenté


Sujet :

PostgreSQL

  1. #1
    Chroniqueur Actualités
    Avatar de Michael Guilloux
    Homme Profil pro
    Data Consultant
    Inscrit en
    Juillet 2013
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Data Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2 954
    Points : 88 505
    Points
    88 505
    Billets dans le blog
    2
    Par défaut PostgreSQL 10 : un véritable support pour le partitionnement de table sera implémenté
    PostgreSQL 10 : un véritable support pour le partitionnement de table sera implémenté
    dans le système de gestion de base de données libre

    Les développeurs du système de gestion de base de données relationnelle et objet (SGBDRO) libre PostgreSQL pourraient bientôt livrer un véritable support du partitionnement de tables. De manière simpliste, on peut dire que le partitionnement fait référence à la division d'une table volumineuse en plusieurs tables plus petites, appelées partitions.

    Il comporte de nombreux avantages comme l’amélioration significative des performances des requêtes en particulier lorsque la plupart des lignes fortement accédées d'une table se trouvent sur une seule partition ou sur un petit nombre de partitions. Si votre table principale est correctement partitionnée, supprimer de nombreux enregistrements sera également plus facile, car cela pourra se traduire par la suppression de tables. Il pourrait en effet être beaucoup plus difficile de supprimer de nombreux enregistrements d'une grande table et ensuite lancer un VACUUM pour récupérer l'espace de stockage occupé par des lignes supprimées. Le partitionnement sur une plage de dates signifie par exemple que pour supprimer les données les plus anciennes, vous aurez simplement besoin de supprimer une ou quelques tables. Ce qui est bien plus facile. Il en est de même pour les chargements massifs de données, ils peuvent être simplement obtenus par l’ajout de partitions, sous réserve que ce besoin ait été pris en compte lors de l’implémentation du partitionnement.

    PostgreSQL offre déjà un support du partitionnement de tables, mais il s’agit d'un support basique à travers l'héritage de tables. Chaque partition doit être créée comme une table enfant d'une unique table parent. La table parent est habituellement vide et elle n'existe que pour représenter l'ensemble complet des données. Lors de la conception de votre base de données PostgreSQL, l’implémentation du partitionnement consiste à :

    • créer la table « maître » ;
    • créer plusieurs tables enfants (les partitions) qui héritent chacune de la table maître ;
    • ajouter les contraintes de tables aux tables de partitions pour définir les valeurs des clés autorisées dans chacune ;
    • pour chaque partition, créer un index sur les colonnes clés, ainsi que tout autre index nécessaire ;
    • de manière optionnelle, définir un déclencheur ou une règle pour rediriger les données insérées dans la table maître vers la partition appropriée ;
    • s'assurer que le paramètre de configuration constraint_exclusion n'est pas désactivé dans postgresql.conf. S’il est désactivé, les requêtes ne seront pas optimisées.

    Mais ce support du partitionnement à travers l’héritage n’est juste qu’une méthode de contournement qui se base sur le rapprochement entre le partitionnement et l’héritage. La solution offerte par PostgreSQL consiste en effet à créer une table parent qui sera vide, des tables enfants qui héritent de la table parent, des déclencheurs pour acheminer les données insérées vers les tables de partitions appropriées, activer le paramètre constraint_exclusion pour optimiser les requêtes, etc. ; alors que le partitionnement natif ne vous montrera que la table parent, et tout le reste sera en arrière-plan. C’est-à-dire que vous n’aurez qu’à déclarer comment une table doit être partitionnée, sans devoir implémenter les détails vous-mêmes. Avec Oracle par exemple, la table partitionnée est vue par le développeur comme une unique table, mais comme plusieurs par le moteur Oracle. Ainsi, selon le critère de partitionnement, Oracle n'interrogera que les partitions concernées.

    Ce que les développeurs de PostgreSQL seraient en train de faire maintenant à partir de la version 10 du SGBD, c’est d’implémenter un tel support du partitionnement de tables. Dans un mail dans la liste de diffusion de PostgreSQL, ils expliquent par exemple que « les tuples insérés dans le parent sont automatiquement acheminés vers la partition concernée, de sorte que les déclencheurs d'insertion de tuple ON INSERT ne sont pas nécessaires. » Mais, il faut noter que pour le moment, certaines fonctionnalités ne sont pas supportées. Ils avertissent par exemple que « la redirection de tuple n'est pas encore prise en charge pour les partitions qui sont des tables étrangères et ne gère pas les mises à jour qui franchissent les limites de la partition. »

    S’il est similaire à l’héritage de table et réutilise une grande partie de l'infrastructure PostgreSQL existante, le partitionnement de table présente toutefois des différences importantes. Il est moins général que l'héritage de table, ce qui, selon les développeurs de PostgreSQL, rendra « plus facile de raisonner sur les propriétés des partitions et servira de base pour une variété d'optimisations possibles, y compris les optimisations du planificateur de requêtes. »

    Sources : PostgreSQL Git, Partitionnement sous PostgreSQL

    Et vous ?

    Utilisez-vous PostgreSQL ?
    Que pensez-vous du support de partitionnement de tables ?

    Voir aussi :

    La version finale de PostgreSQL 9.6 est disponible avec le parallélisme des requêtes et de nouvelles options pour la réplication synchrone
    Les systèmes de JIT améliorent la performance des requêtes SQL complexes, une extension de PostgreSQL intègre LLVM et diminue les temps de traitement

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 36
    Points
    36
    Par défaut
    ha enfin, le rêve !
    ça et le sharding, même si citus par exemple commence à répondre au besoin.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 925
    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 : 21 925
    Points : 51 731
    Points
    51 731
    Billets dans le blog
    6
    Par défaut
    Ha enfin, bonne nouvelle car la précédente mouture du partitionnement était une véritable merde innommable. J'en avais décrit les inconvénients dans cet article :
    http://blog.developpez.com/sqlpro/p1...paraison_postg

    Les développeurs de PG en avaient d'ailleurs conscience, car il exprimait dans les évolutions futures, le souhait de revoir leur copie !
    Cela dit, ils sont sacrément en retard, car ils avaient promis la chose pour la V9 !
    http://wiki.postgresql.org/wiki/Table_partitioning

    Il est d'ailleurs assez amusant de constater que PG s'intéressent aux techniques de partitionnement de tous les
    concurrent (même de MySQmerde) sauf à celui de SQL Server qui a été mis en place dans la version 2005 et n'a jamais évolué tant le système est stable, fiable et simplissime ! C'est très dommage...

    A+

Discussions similaires

  1. Postgresql support pour SUGARCRM
    Par pcheral dans le forum SugarCRM
    Réponses: 2
    Dernier message: 14/09/2011, 16h15
  2. [Irrlicht] formats supportés pour Objet 3D
    Par stilobique dans le forum Irrlicht
    Réponses: 2
    Dernier message: 18/05/2007, 17h42
  3. Support pour graver 6Go
    Par DiabloZizi dans le forum Périphériques
    Réponses: 5
    Dernier message: 30/04/2007, 14h12
  4. support pour les fonds transparents
    Par Max Payne dans le forum Imagerie
    Réponses: 1
    Dernier message: 22/02/2007, 21h59
  5. [Xinclude] Support pour le web
    Par DarkNagash dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 20/05/2006, 15h00

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