Partition (base de données)
Dans une base de données, une partition est une division logique d'une table stockée en plusieurs parties indépendantes. Il peut être horizontal (les lignes d'une même table sont divisées en plusieurs partitions) ou vertical (les colonnes d'une même table sont divisées en plusieurs lots). Le partitionnement de tables est généralement effectué pour améliorer la gestion, la performance ou la disponibilité. Chaque partition peut être placée sur des serveurs ou des disques différents. Cela permet également d'obtenir une capacité de base de données supérieure à la taille maximum des disques durs ou d'effectuer des requêtes en parallèle sur plusieurs partitions.
Pour les articles homonymes, voir Partition.
Les principes de partitionnement de tables dans les SGBD reposent sur la famille d'algorithmes "diviser pour régner".
Partitionnement horizontal
Le partitionnement horizontal d'une table divise les données en blocs de lignes, généralement en fonction de la clef primaire.
Partitionnement vertical
Le partitionnement vertical d'une table divise les données en blocs de colonnes.
Critères de partitionnement
Partitionnement vertical
On décide généralement de partitionner une table de manière verticale lorsque celle-ci possède un degré trop élevé (le nombre de colonne est appelé degré). On parle alors de table "obèse". Les critères retenus pour un partitionnement vertical sont généralement lié à l'usage de la table. On constate que certaines colonnes de la table sont lues de manière conjointes, tandis que d'autres sont ignorés. On isole alors les différentes colonnes lues conjointement pour former, en quelques sortes, des "sous tables" liées par la clef primaire conjointe. Ce partitionnement permet de réduire la consommation des E/S (Entrées/Sorties) c'est-à-dire des pages lues ou écrite (moins d'utilisation du cache), comme de minimiser la quantité de données verrouillées lors des écritures (moins de blocages), il en résulte donc des gains de performances.
La table obèse montrée ci avant, peut être découpé en plusieurs partitions verticales, chacune répondant à des besoins d'exploitation différents.
- Une première partition, concernera pas exemple, les utilisateurs voulant connaître les informations de création et dernière exécution, de plan, et de "statement";
- Une seconde partition concernera les métriques d'exécution et de temps;
- Une troisième partition indiquera les métriques des lectures et écritures.
Il en résultera le découpage suivant :
Les gains de performances du partitionnement vertical seront d'autant plus grand si certaines partitions comportent de nombres lignes vides. En d'autres termes, si, lors du découpage, certaines partitions comprennent de nombreuses lignes vide, ces lignes seront éliminées, et la volumétrie du stockage sensiblement diminuée. En contre partie, il faudra utiliser la technique de la jointure externe pour reconstituer les différentes informations de la table si le besoin se fait sentir d'exploiter simultanément différentes partitions de la table.
Ce type de partitionnement est généralement effectué par le responsable de l'architecture de la base, en d'autres terme le modélisateur. Il existe peu d'outils capable de proposer de manière automatique un tel partitionnement car il est nécessaire d'étudier l'exploitation de la table dans la durée et la fréquence sur une période assez longues avant de trouver les bonnes césures.
Partitionnement horizontal
Les systèmes de gestion de base de données proposent le partitionnement d'une table selon différents critères. Cela nécessite une clef de partitionnement (en général une colonne de la table) et divisent la table suivant la valeur de la clef.
Les critères principaux sont les suivants :
1 - Partitionnement par intervalles
- Les partitions sont déterminées par des domaines, chaque domaine étant constitué par une plage de valeurs continues. C'est généralement le cas du partitionnement par dates, dont les intervalles peuvent être mensuels, trimestriels, annuels...
2 - Partitionnement par liste
- Le domaine du partitionnement est une liste de valeurs pour laquelle chaque partition ne contient exclusivement que la seule valeur de la partition. Considérons par exemple le cas d'une table que l'on désire partitionner par devise. La colonne de partitionnement
Monnaie
permettra de ventiler les lignes de la table suivant différentes devises, par exempleEuro
,Dollar US
,Livre Sterling
,Yen
ouFranc Suisse
ce qui facilitera les calculs de conversion et de change.
3 - Partitionnement par hachage
- Les partitions sont déterminées par un calcul pseudo aléatoire effectué sur une valeur arbitraire, par exemple un email. On applique alors une fonction de hachage, généralement basique (pour que le calcul soit le plus rapide possible) et l'on calcule le modulo du résultat par rapport au nombre de partitions que l'on souhaite créer. Par exemple, si l'on désire utiliser 4 partitions, on appliquera le modulo 3 au résultat du hachage après avoir rendu le nombre positif (valeur absolue). Une tel calcul s'effectue comme suit :
MOD(ABS(MD5(email)), 4)
- Une telle formule de calcul retournera une valeur entre 0 et 3.
- Ce type de partitionnement est souvent utiliser pour équilibrer la charge des partitions, dans le sens ou un partitionnement avec un critère sémantique particulier entraine, la plupart du temps, un déséquilibrage des partitions. Dans notre exemple de partitionnement par devise, il y a fort à parier que les partitions "Livre Sterling" et "Franc Suisse" devraient avoir une cardinalité bien moins élevé que "Dollar US" ou "Euro".
4 - partitionnement composite
- Le partitionnement composite permet de combiner plusieurs de ces schémas de partitionnement, par exemple en appliquant d'abord un partitionnement par intervalles puis un sous-partitionnement par hachage.
Partitionnement sur Oracle
Le partitionnement de la base de données Oracle est un module de division des données d'Oracle, payant et fréquemment utilisé sur des tables de volumétrie importante.
Le partitionnement permet de découper une table ou un index sur des critères logiques. La table se comporte alors comme plusieurs tables de dimensions plus petites. Les avantages principaux du partitionnement sont :
- de pouvoir définir des critères de stockage différents pour chacune des partitions (tablespace, initial...)
- le découpage logique de la table permet un accès plus rapide aux informations (moins de lectures disques à effectuer en particulier)
Liens externes
- (en) Partitionnement IBM DB2
- (en) Partitionnement MySQL
- (en) Partitionnement Oracle
- (en) Partitionnement SQL Server
- (en) Partitionnement PostgreSQL
- (en) Partitionnement Sybase ASE 15.0
- Portail des bases de données