Cours
Qu'est-ce que le partitionnement des données ? Un guide complet pour les débutants
Que vous construisiez des applications centrées sur le client ou que vous exécutiez des pipelines d'analyse complexes, une chose devient claire : la façon dont vous stockez et accédez aux données peut faire ou défaire les performances.
J'ai pu constater de visu à quel point les systèmes fonctionnent de manière plus fluide lorsque les données sont structurées de manière réfléchie, et c'est là que le partitionnement des données entre en jeu. C'est l'une des techniques qui peut améliorer considérablement la vitesse d'interrogation, l'efficacité du stockage et l'évolutivité.
Dans ce billet, j'expliquerai le partitionnement des données, les différents types disponibles et les meilleures pratiques que j'ai apprises en cours de route.
Qu'est-ce que le partitionnement des données ?
Le partitionnement des données est une technique permettant de diviser de grands ensembles de données en morceaux plus petits et plus faciles à gérer, appelés partitions. Chaque partition contient un sous-ensemble de données et est répartie sur plusieurs nœuds ou serveurs. Ces partitions peuvent être stockées, interrogées et gérées comme des tableaux individuels, bien qu'elles appartiennent logiquement au même ensemble de données.
Le partitionnement des données améliore les performances et l'évolutivité des bases de données. Par exemple, la recherche d'un point de données dans l'ensemble du tableau prend plus de temps et utilise plus de ressources que la recherche dans une partition spécifique. C'est pourquoi les données sont stockées sous forme de partitions.
Types de partitionnement des données
Le partitionnement des données comprend différents types, chacun ayant une stratégie et des avantages uniques. Dans cette section, j'aborde les types les plus courants.
Cloisonnement horizontal
Au lieu de stocker toutes les données dans un seul tableau, le partitionnement horizontal divise les données en lignesCe qui signifie que différents ensembles de lignes sont stockés sous forme de partitions.
Toutes les partitions du partitionnement horizontal contiennent le même ensemble de colonnes mais différents groupes de lignes.
- Exemple : Supposons que vous disposiez d'un ensemble de données météorologiques pour plusieurs États dans trois pays différents. Vous pouvez diviser ce tableau en trois en répartissantles lignes par pays.
Température |
État |
Pays |
Saison |
-30° F |
Alaska |
ÉTATS-UNIS |
L'hiver |
48.2° F |
Queensland |
Australie |
L'été |
100° F |
Andhra Pradesh |
Inde |
L'été |
35° F |
Californie |
ÉTATS-UNIS |
L'hiver |
96° F |
Texas |
ÉTATS-UNIS |
L'été |
62° F |
Tasmania |
Australie |
L'hiver |
Cloisonnement horizontal par pays :
Température |
État |
Pays |
Saison |
-30° F |
Alaska |
ÉTATS-UNIS |
L'hiver |
35° F |
Californie |
ÉTATS-UNIS |
L'hiver |
35° F |
Californie |
ÉTATS-UNIS |
L'hiver |
Température |
État |
Pays |
Saison |
48.2° F |
Queensland |
Australie |
L'été |
62° F |
Tasmania |
Australie |
L'hiver |
Température |
État |
Pays |
Saison |
100° F |
Andhra Pradesh |
Inde |
L'été |
Cloisonnement vertical
Partitionnement vertical divise les données par colonnesChaque partition contient donc le même nombre de lignes mais moins de colonnes.
La clé de partition ou la colonne primaire sera présente dans chaque partition, ce qui maintient la relation logique.
Le partitionnement vertical est utilisé lorsque des informations sensibles doivent être stockées séparément des données normales. Il permet d'enregistrer les colonnes sensibles dans une partition et les données standard dans une autre.
Un autre cas d'utilisation courant consiste à regrouper les colonnes fréquemment mises à jour dans une partition et les autres dans une partition séparée.
- Exemple : Si les colonnes "numéro de téléphone" et "salaire" des employés dans le tableau ci-dessous sont confidentielles, partitionnons le tableaue en conséquence.
Emp_id |
Emp_name |
Désignation |
Emp_email |
Emp_phone |
Emp_salary |
z0yu9h |
Alex |
Scientifique des données |
alex@yoho.com |
+101 890 456 |
250K |
f8o5pj |
Adam |
Ingénieur de données |
adam@prodgy.com |
+630 789 365 |
230K |
z006yu |
Matt |
Analyste de données |
matt@oltk.com |
+857 342 937 |
166K |
a6u895 |
Elina |
Ingénieur Ops |
elina@wal.com |
+892 494 782 |
190K |
g68w90 |
Joseph |
Ingénieur logiciel |
joseph@yoho.com |
+852 603 389 |
210K |
Emp_id
est l'identifiant unique dans le tableau ci-dessus, toutes les partitions le possèdent donc.
Partition 1 :
Emp_id |
Emp_name |
Désignation |
Emp_email |
z0yu9h |
Alex |
Scientifique des données |
alex@yoho.com |
f8o5pj |
Adam |
Ingénieur de données |
adam@prodgy.com |
z006yu |
Matt |
Analyste de données |
matt@oltk.com |
a6u895 |
Elina |
Ingénieur Ops |
elina@wal.com |
g68w90 |
Joseph |
Ingénieur logiciel |
joseph@yoho.com |
Partition 2 :
Emp_id |
Emp_phone |
Emp_salary |
z0yu9h |
+101 890 456 |
250K |
f8o5pj |
+630 789 365 |
230K |
z006yu |
+857 342 937 |
166K |
a6u895 |
+892 494 782 |
190K |
g68w90 |
+852 603 389 |
210K |
Cloisonnement des gammes
Le partitionnement par plage divise les données sur la base d'une plage de valeurs pour une colonne particulière.
En règle générale, chaque partition a une limite inférieure et une limite supérieure pour la colonne clé, et un enregistrement qui se situe dans cette fourchette est affecté à cette partition.
- Exemple : Supposons que des données sur les ventes soient disponibles entre 2021 et 2023. Nous pouvons répartir ces données par année de manière à ce que les ventes de 2021 à 2022 relèvent d'une partition et celles de 2022 à 2023 d'une autre.
Product_id |
Date |
Profit |
z0yu9h |
2021-03-17 |
$100K |
f8o5pj |
2022-04-04 |
$234K |
z006yu |
2022-09-13 |
$789K |
a6u895 |
2021-07-23 |
$237K |
g68w90 |
2022-02-26 |
$2345K |
Partition 1 :
product_id |
Date |
Profit |
z0yu9h |
2021-03-17 |
$100K |
a6u895 |
2021-07-23 |
$237K |
Partition 2 :
product_id |
Date |
Profit |
f8o5pj |
2022-04-04 |
$234K |
z006yu |
2022-09-13 |
$789K |
Partitionnement du hachage
Une fonction de hachage est appliquée à la clé de partition et le résultat détermine quel enregistrement doit être stocké dans quelle partition. Dans cette technique, le nombre de partitions est décidé à l'avance.
Le reste obtenu en divisant la valeur de hachage par le nombre de partitions détermine la partition dans laquelle cet enregistrement spécifique doit être stocké. Voyons cela à l'aide d'un exemple :
- Exemple : Par exemple, pour le produit avec l'ID
z0yu9h
,hash(‘z0yu9h’) = 101
et le nombre de partitions = 4, alors 101%4 = 1. Cet enregistrement est donc stocké dans la première partition.
De cette manière, les valeurs de hachage sont calculées pour la colonne de la clé de partition divisée par le nombre de partitions, et le résultat détermine la partition finale.
Partitionnement des listes
La procédure est similaire au partitionnement par plage, mais au lieu de diviser les données par une plage de valeurs, le partitionnement par liste divise les données sur la base d'un ensemble prédéfini de valeurs.
Reprenons l'exemple du tableau des températures.
Température |
État |
Pays |
Saison |
30° F |
Alaska |
ÉTATS-UNIS |
L'hiver |
48.2° F |
Queensland |
Australie |
L'été |
100° F |
Andhra Pradesh |
Inde |
L'été |
35° F |
Californie |
ÉTATS-UNIS |
L'hiver |
96° F |
Texas |
ÉTATS-UNIS |
L'été |
62° F |
Tasmania |
Australie |
L'hiver |
Dans les données ci-dessus, la colonne "Saison" contient une liste de valeurs [‘winter’, ‘summer’]
. Ainsi, le partitionnement de la liste sur la saison ressemble à ce qui suit :
Partition 1 :
Température |
État |
Pays |
Saison |
30° F |
Alaska |
ÉTATS-UNIS |
L'hiver |
35° F |
Californie |
ÉTATS-UNIS |
L'hiver |
62° F |
Tasmania |
Australie |
L'hiver |
Partition 2 :
Température |
État |
Pays |
Saison |
48.2° F |
Queensland |
Australie |
L'été |
100° F |
Andhra Pradesh |
Inde |
L'été |
96° F |
Texas |
ÉTATS-UNIS |
L'été |
Cloisonnement composite
Une partition composite est une combinaison de deux techniques de partitionnement. Un tableau est d'abord divisé à l'aide d'une stratégie, puis chaque partition est divisée à l'aide d'une autre technique.
Les stratégies de partitionnement sont souvent abordées lors d'entretiens techniques - voir les meilleures questions d'entretien DBA pour 2025.
Cas d'utilisation du partitionnement des données
Maintenant que nous avons évalué les différents types de stratégies de partitionnement, examinons quand le partitionnement des données est utile.
Bases de données distribuées
Les systèmes distribués sont des collections de nœuds physiquement situés dans des serveurs distincts mais reliés entre eux par un réseau. Apache Cassandra, Amazon DynamoDB et Google Bigtable en sont des exemples.
Ces systèmes utilisent en interne le partitionnement des données pour organiser et distribuer les données entre les nœuds.
Opérations OLAP
L'OLAP représente les données multidimensionnelles sous forme de cubes, ce qui permet aux utilisateurs d'explorer les données sous différents angles. Bien que ces cubes représentent des données pré-agrégées, les données sous-jacentes sont encore très nombreuses, de sorte que les requêtes doivent être optimisées à l'aide du partitionnement des données.
Par exemple, l'application du partitionnement en cubes (une technique de partitionnement des données) divise les données en cubes plus petits sur la base de critères spécifiques. Lorsque vous interrogez les données, la recherche est effectuée sur un cube particulier en ignorant les cube non pertinents, ce qui réduit les opérations d'entrée/sortie.
De même, le partitionnement des dimensions peut être appliqué pour diviser les données par niveau, hiérarchie ou colonne.
Gestion des journaux
Les journaux contiennent des informations sur les événements, les transactions et les opérations qui se produisent dans un système. Ils sont utilisés pour retracer les échecs, les bogues, les cas limites et même les messages de réussite.
Le partitionnement des journaux accélère le processus de débogage et vous permet d'obtenir plus rapidement les informations nécessaires. Par exemple, si vous avez divisé les journaux par période, vous pouvez facilement les retrouver par date, semaine, mois ou année.
Pipelines d'apprentissage automatique
Dans les cas d'utilisation de l'apprentissage automatique, les données sont divisées en ensembles de formation, de validation et de test. Cette approche permet de s'assurer que les informations tirées de l'ensemble de test ne sont pas révélées au modèle pendant la formation, afin d'éviter un surajustement.
En outre, si les données d'apprentissage sont très nombreuses, une seule machine ne peut pas les traiter et les intégrer dans un modèle. Les données sont donc divisées en morceaux et introduites dans le modèle par le biais du partitionnement des données.
Outils de partitionnement des données
Le partitionnement des données peut être mis en œuvre dans les bases de données SQL et NoSQL. Nous allons les examiner dans cette section.
Bases de données SQL
PostgreSQL
PostgreSQL offre un support intégré pour le partitionnement par plage, par liste et par hachage. Par exemple, la requête suivante crée une partition pour chaque année afin d'accéder efficacement aux bénéfices des ventes et aux ventes totales pour chaque exercice financier.
CREATE TABLE sales(
city_id int not null,
sales_year date not null,
total_sales int,
sales_profits int
) PARTITION BY RANGE (sales_year);
MySQL
MySQL prend en charge différents types de partitionnement horizontal, tels que le partitionnement par plage, par liste, par hachage et par clé. À ce jour (version 8.4), il ne prend pas en charge le partitionnement vertical.
La requête MySQL ci-dessous répartit les données des employés en trois groupes, p1
, p2
, et p3
, en fonction de leur date d'adhésion. Tous les employés qui sont entrés dans l'entreprise avant 2000 font partie de la partition p1
. Les salariés qui ont adhéré entre 2000 et 2010 relèvent de la partition p2
, et les salariés qui ont adhéré entre 2010 et 2020 relèvent de la partition p3
.
CREATE TABLE employee(
firstname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
salary INT,
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p1 VALUES LESS THAN (2000),
PARTITION p2 VALUES LESS THAN (2010),
PARTITION p3 VALUES LESS THAN (2020)
);
Microsoft SQL Server
SQL Server offre des fonctions de partitionnement par le biais de fonctions et de schémas de partitionnement. Une fonction de partition spécifie la manière dont les données sont divisées, tandis que le schéma de partition détermine le groupe de fichiers dans lequel la partition sera stockée.
Dans les requêtes suivantes :
- Nom de la fonction :
sales_by_year
- Nom du système :
sales_filegroup
- Noms des groupes de fichiers :
fg01
,fg02
,fg03
,fg04
Fonction de partition :
create partition function sales_by_year (date)
as range right for values
('2024-01-01', '2024-02-01', '2024-03-01', ‘2024-04-01’);
Schéma de partition :
CREATE PARTITION SCHEME sales_filegroup
AS PARTITION sales_by_year
TO (fg01, fg02, fg03, fg04);
Ici, les fichiers stockent les données comme suit :
fg01
- dates antérieures à '2024-01-01',fg02
- du "2024-01-01" au "2024-01-31".fg03
- Du '2024-02-01' au '2024-02-29'.fg04
- du '2024-03-01' au '2024-03-31'.
Comme nous avons mentionné range right
dans la requête, chaque date limite est incluse dans la partition suivante.
Si vous utilisezSQL Server, ce tutoriel sur SQL Server présente les concepts et les outils clés pour la gestion des données partitionnées. Pour un parcours d'apprentissage structuré, le cursus Fondamentaux du serveur SQL présente les fonctionnalités de base nécessaires à la construction debases de données SQL performantes.
Bases de données NoSQL
Amazon DynamoDB
DynamoDB gère automatiquement le partitionnement en interne. Lorsque vous écrivez un élément dans un tableau DynamoDB, il passe par un routeur de requêtes. Le routeur analyse la clé de partition et applique une fonction de hachage. La sortie de la fonction de hachage détermine la partition spécifique où l'enregistrement sera stocké.
L'ensemble du processus est automatisé au sein de DynamoDB, de sorte que l'utilisateur ne doit pas se préoccuper de la fonction de hachage ou de la manière dont les partitions sont gérées.
Mongodb
MongoDB répartit les données entre les serveurs grâce au concept de "sharding". Les données sont partitionnées sur la base d'une clé de partage, qui doit être choisie avec soin afin d'éviter des distributions inégales.
En règle générale, la clé de tesson doit avoir une cardinalité élevée et être la colonne la plus fréquemment utilisée dans les requêtes. Ces questions d'entretien sur MongoDB couvrent presque tous lessujets importants, ainsi que le sharding.
Apache Cassandra
Le partitionneur Cassandra est un algorithme de hachage qui détermine quel nœud d'un cluster doit stocker une partition particulière. La clé de partition est analysée par l'algorithme pour produire un jeton. Ce jeton est ensuite comparé aux valeurs attribuées aux nœuds. Enfin, les données sont stockées dans le nœud qui correspond au jeton.
Les algorithmes de partition les plus courants sont Murmur3Partitioner
, RandomPartitioner
, et ByteOrderedPartitioner
.
Comment mettre en œuvre le partitionnement des données ?
Examinons maintenant les étapes nécessaires à la mise en œuvre correcte du partitionnement des données.
Étape 1 : Comprendre les données et les modèles d'accès
Évaluez minutieusement la façon dont votre application interroge la base de données, les données auxquelles elle accède souvent, la taille des données et les goulets d'étranglement en matière de performances. Ces informations vous aideront à définir des objectifs clairs en matière de partitionnement et à identifier les colonnes clés fréquemment impliquées dans les opérations sur les données.
Étape 2 : Choisissez une technique de partitionnement
Nous avons déjà abordé les techniques les plus courantes et voici comment choisir entre elles :
- Cloisonnement horizontal : Lorsque vous avez des millions et des milliards de tableaux qui seraient stockés dans un seul tableau et entraîneraient des problèmes de mémoire, vous devriez opter pour le partitionnement horizontal. Il stocke un ensemble différent de lignes dans différents tableaux.
- Cloisonnement vertical : Si un groupe de colonnes est souvent consulté et que d'autres le sont occasionnellement, vous pouvez mettre en œuvre le partitionnement vertical pour stocker les colonnes séparément en fonction de leurs schémas d'accès.
- Approche hybride : Lorsque vous disposez d'ensembles de données plus importants qui vous obligent à réduire le nombre de lignes tout en optimisant les requêtes pour un sous-ensemble de colonnes, vous devez opter pour une approche hybride. Il combine les avantages du cloisonnement horizontal et du cloisonnement vertical.
Étape 3 : Créer des partitions
Voici un exemple de requête SQL pour créer des partitions à l'aide du partitionnement par hachage.
CREATE TABLE employees (
emp_id INT NOT NULL,
name VARCHAR(30),
hired DATE NOT NULL DEFAULT '2024-01-01',
job_id INT,
location_id INT
)
PARTITION BY HASH(location_id)
PARTITIONS 4;
Dans le code ci-dessus, la colonne "location_id" est transmise à la fonction de hachage et la sortie détermine la partition à laquelle l'enregistrement doit être attribué. La ligne de code partitions 4
indique le nombre total de partitions à créer.
Marquez d'un signet cette feuille de contrôle pratique sur les bases de SQL pour vousréférer à la syntaxe SQL de base lorsque vous mettez en œuvre des partitions.
Étape 4 : Contrôle et optimisation des partitions
- Surveillez en permanence vos opérations de données et assurez-vous que les partitions sont à jour et valides.
- Au fur et à mesure que l'application évolue, vous devrez peut-être ajouter des partitions ou choisir une approche différente, comme une partition hybride, pour répondre à l'évolution des besoins.
- Veillez à ce que la taille et la stratégie de la partition soient adaptées aux opérations fréquentes effectuées sur la base de données.
- Veillez à ce que les données soient réparties uniformément entre les partitions, sinon vous devrez peut-être les rééquilibrer.
Défis et considérations pour le partitionnement des données
Les optimisations s'accompagnent de compromis et de défis, comme c'est le cas pour tout ce qui concerne le monde du logiciel. Voici ceux que vous devriez prendre en considération :
- Partition skew : L'asymétrie des partitions signifie que quelques partitions reçoivent plus de données et de travail de traitement alors que d'autres restent souvent inactives. Pour éviter cela, choisissez la bonne clé de partition et une stratégie qui distribue uniformément les données sur toutes les partitions.
- Frais généraux de maintenance : Au fur et à mesure que les données augmentent, vous devez réévaluer les stratégies de partitionnement existantes et vous assurer qu'elles sont adaptées aux données actuelles. Si ce n'est pas le cas, il se peut que vous deviez repartitionner ou fusionner des partitions.
- Migrations de données : Dans le cas de la migration de vos données vers une nouvelle architecture, une attention particulière est nécessaire pour s'assurer que les partitions sont compatibles avec le nouvel environnement. En outre, le déplacement de données entre partitions implique des complexités telles que la gestion de la cohérence des données entre les différentes partitions.
- Courbe d'apprentissage abrupte : Le partitionnement des données ajoute de la complexité à un système ou à une architecture cloud. Ils ne sont pas faciles à interroger, à migrer ou à analyser, ce qui entraîne une courbe d'apprentissage abrupte pour les débutants.
Bonnes pratiques pour le partitionnement des données
Comme vous pouvez le constater, le partitionnement des données devient complexe à mesure que le volume des données augmente. Toutefois, la mise en œuvre de ces pratiques garantira que le partitionnement améliore l'efficacité tout en n'affectant pas les performances.
- Alignez les partitions sur les modèles de requête : Le choix de la bonne stratégie de partition et de la bonne clé de partition peut améliorer de manière significative les performances de la base de données. Comprenez les opérations de données et les modèles de requête les plus courants dans votre base de données, et sélectionnez une clé de partition fréquemment impliquée dans les requêtes tout en garantissant une distribution homogène des données.
- Contrôler régulièrement : Aujourd'hui, les applications sont dynamiques et évoluent constamment en fonction des tendances et des demandes. Il est donc important de contrôler régulièrement vos partitions afin de les aligner sur les schémas d'accès actuels et de les re-partitionner si nécessaire.
- Réduire les frais généraux : La gestion manuelle des partitions à grande échelle est complexe. Cependant, les bases de données NoSQL comme Apache Cassandra et Amazon DynamoDB automatisent le processus sans nécessiter beaucoup de travail supplémentaire. En outre, certains outils d'automatisation ajustent les partitions en fonction de l'évolution des données, ce qui permet de repartitionner ou de fusionner les partitions en fonction de vos besoins.
Conclusion
Un partitionnement efficace des données est essentiel pour maintenir les performances et l'évolutivité au fur et à mesure que vos données augmentent. Avec la bonne stratégie en place, vous pouvez réduire la latence des requêtes, optimiser le stockage et simplifier la maintenance. Il s'agit d'une mesure pratique dont l'impact est mesurable.
Pour en savoir plus sur la façon dont le partitionnement permet aux systèmes distribués d'évoluer, consultez ce guide sur les partitions Kafka. Pour comprendre comment les structures relationnelles influencent les décisions de partitionnement, commencez par ce cours sur les bases de données relationnelles.
Devenez ingénieur en données
Srujana est rédactrice technique indépendante et titulaire d'un diplôme de quatre ans en informatique. Écrire sur divers sujets, notamment la science des données, l'informatique en nuage, le développement, la programmation, la sécurité et bien d'autres encore, est pour elle une évidence. Elle aime la littérature classique et la découverte de nouvelles destinations.
Apprenez-en plus sur la conception de bases de données grâce à ces cours !
Cours
Introduction au serveur SQL
Cours