
Une partition est une division d'une base de données logique ou de ses éléments constitutifs en parties indépendantes distinctes. Le partitionnement d'une base de données est généralement effectué pour des raisons de facilité de gestion, de performances ou de disponibilité , ou pour équilibrer la charge . Il est populaire dans les systèmes de gestion de bases de données distribuées , où chaque partition peut être répartie sur plusieurs nœuds, les utilisateurs du nœud effectuant des transactions locales sur la partition. Cela augmente les performances des sites qui ont des transactions régulières impliquant certaines vues de données, tout en maintenant la disponibilité et la sécurité.
Critères de partitionnement
Les systèmes de gestion de bases de données relationnelles haut de gamme actuels proposent différents critères pour diviser la base de données. Ils prennent une clé de partitionnement et attribuent une partition en fonction de certains critères. Certains critères courants incluent :
- Partitionnement par plage : sélectionne une partition en déterminant si la clé de partitionnement se situe dans une certaine plage. Un exemple pourrait être une partition pour toutes les lignes où la colonne « code postal » a une valeur comprise entre 70 000 et 79 999. Il distribue les tuples en fonction des intervalles de valeurs (plages) de certains attributs. En plus de prendre en charge les requêtes de correspondance exacte (comme dans le hachage), il est bien adapté aux requêtes de plage. Par exemple, une requête avec un prédicat « A entre A1 et A2 » peut être traitée par le ou les seuls nœuds contenant des tuples.
- Partitionnement de liste : une partition se voit attribuer une liste de valeurs. Si la clé de partitionnement possède l'une de ces valeurs, la partition est choisie. Par exemple, toutes les lignes dont la colonne
CountryestIceland,Norway,Sweden,FinlandouDenmarkpourraient constituer une partition pour les pays nordiques . - Partitionnement composite : permet certaines combinaisons des schémas de partitionnement ci-dessus, par exemple en appliquant d'abord un partitionnement par plage puis un partitionnement par hachage. Le hachage cohérent peut être considéré comme un composite de partitionnement par hachage et par liste où le hachage réduit l'espace clé à une taille qui peut être répertoriée.
- Partitionnement round-robin : stratégie la plus simple, elle assure une distribution uniforme des données. Avec
nles partitions, leiième tuple dans l'ordre d'insertion est assigné à partition(i mod n). Cette stratégie permet d'accéder séquentiellement à une relation en parallèle. Cependant, l'accès direct à des tuples individuels, basé sur un prédicat, nécessite d'accéder à la relation entière. - Partitionnement par hachage : applique une fonction de hachage à un attribut qui génère le numéro de partition. Cette stratégie permet aux requêtes de correspondance exacte sur l'attribut de sélection d'être traitées par un seul nœud et à toutes les autres requêtes d'être traitées par tous les nœuds en parallèle.
Méthodes de partitionnement
Le partitionnement peut être effectué soit en créant des bases de données plus petites et séparées (chacune avec ses propres tables , index et journaux de transactions ), soit en divisant les éléments sélectionnés, par exemple une seule table.
Cloisons horizontales
Le partitionnement horizontal consiste à placer différentes lignes dans différentes tables. Par exemple, les clients dont le code postal est inférieur à 50 000 sont stockés dans CustomersEast, tandis que les clients dont le code postal est supérieur ou égal à 50 000 sont stockés dans CustomersWest. Les deux tables de partition sont alors CustomersEast et CustomersWest, tandis qu'une vue avec une union peut être créée sur les deux pour fournir une vue complète de tous les clients.
Cloisons verticales
Le partitionnement vertical consiste à créer des tables avec moins de colonnes et à utiliser des tables supplémentaires pour stocker les colonnes restantes. En général, cette pratique est connue sous le nom de normalisation . Cependant, le partitionnement vertical va plus loin et partitionne les colonnes même lorsqu'elles sont déjà normalisées. Ce type de partitionnement est également appelé « fractionnement de lignes », car les lignes sont divisées par leurs colonnes et peuvent être effectuées de manière explicite ou implicite. Des machines physiques distinctes peuvent être utilisées pour réaliser un partitionnement vertical : le stockage de colonnes peu utilisées ou très larges, occupant une quantité importante de mémoire, sur une machine différente, par exemple, est une méthode de partitionnement vertical. Une forme courante de partitionnement vertical consiste à séparer les données statiques des données dynamiques, car les premières sont plus rapides d'accès que les secondes, en particulier pour une table où les données dynamiques ne sont pas utilisées aussi souvent que les données statiques. La création d'une vue sur les deux tables nouvellement créées restaure la table d'origine avec une pénalité de performances, mais l'accès aux données statiques seules affichera des performances supérieures. Une base de données en colonnes peut être considérée comme une base de données qui a été partitionnée verticalement jusqu'à ce que chaque colonne soit stockée dans sa propre table.