Qu’est-ce que le sharding ?
Le sharding est un type de partitionnement de base de données qui sépare les grandes bases de données en parties plus petites, plus rapides et plus faciles à gérer. Ces parties plus petites sont appelées « shards de données ». Le mot shard signifie « une petite partie d’un tout ».
Sharding horizontal et vertical
Le sharding consiste à diviser et à distribuer un data set logique entre plusieurs bases de données qui ne partagent rien et peuvent être déployées sur plusieurs serveurs. Pour réaliser le sharding, les lignes ou les colonnes d’une grande table de base de données sont divisées en plusieurs tables plus petites.
Une fois qu’un shard logique est stocké sur un autre nœud, il est appelé shard physique. Un shard physique peut contenir plusieurs shards logiques. Les shards sont autonomes et ne partagent pas les mêmes données ou ressources informatiques. C’est pourquoi ils illustrent une architecture sans partage. En même temps, les données de tous les shards représentent un data set logique.
Le sharding peut être horizontal ou vertical :
Sharding horizontal. Lorsque chaque nouvelle table a le même schéma mais des lignes uniques, on parle de sharding horizontal. Dans ce type de sharding, des machines supplémentaires sont ajoutées à une pile existante pour répartir la charge, augmenter la vitesse de traitement et supporter davantage de trafic. Cette méthode est particulièrement efficace lorsque les requêtes renvoient un sous-ensemble de lignes qui sont souvent regroupées.
Le sharding vertical. Lorsque chaque nouvelle table possède un schéma qui est un sous-ensemble fidèle du schéma de la table d’origine, on parle de sharding vertical. Elle est efficace lorsque les requêtes ne renvoient généralement qu’un sous-ensemble de colonnes de données.
L’illustration suivante montre à quoi ressemblent les nouvelles tables lorsque le sharding horizontal et vertical est effectué sur le même data set d’origine.
Avantages du sharding
Le sharding est courant dans les architectures de bases de données évolutives. Comme les shards sont plus petits, plus rapides et plus faciles à gérer, ils contribuent à améliorer l’évolutivité, les performances et l’administration des bases de données. Le sharding réduit également le coût de transaction de la base de données.
La mise à l’échelle horizontale, également appelée « scaling out », permet de créer une conception de base de données plus flexible, ce qui est particulièrement utile pour le traitement parallèle. Elle offre une évolutivité quasi illimitée pour les charges de travail intenses et les besoins en Big Data. Avec le sharding horizontal, les utilisateurs peuvent utiliser de manière optimale toutes les ressources de calcul d’un cluster pour chaque requête. Cette méthode de sharding accélère également la résolution des requêtes, car chaque machine doit analyser moins de lignes lorsqu’elle répond à une requête.
Le sharding vertical augmente la capacité de RAM ou de stockage et améliore la capacité de l’unité centrale de traitement (CPU). Elle augmente ainsi la puissance d’une seule machine ou d’un seul serveur.
Les bases de données sharded offrent également une meilleure disponibilité et atténuent l’impact des pannes car, pendant une panne, seules les parties d’une application qui dépendent des morceaux de données manquants deviennent inutilisables. Une base de données sharded réplique également les shards de sauvegarde sur des nœuds supplémentaires afin de minimiser davantage les dommages dus à une panne. En revanche, une application fonctionnant sans base de données sharded peut être totalement indisponible après une panne.
Un autre avantage du sharding est qu’il augmente le débit de lecture/écriture lorsque ces opérations sont limitées à un seul shard.
Différence entre le sharding et le partitionnement
Bien que le sharding et le partitionnement divisent tous deux une grande base de données en bases de données plus petites, il existe une différence entre les deux méthodes.
Après le sharding d’une base de données, les données des nouvelles tables sont réparties sur plusieurs systèmes, mais ce n’est pas le cas avec le partitionnement. Le partitionnement regroupe des sous-ensembles de données au sein d’une seule instance de base de données.
Types d’architectures de sharding
Voici les principaux types d’architectures de sharding.
Sharding basé sur les clés
Dans le sharding basé sur les clés, également appelé sharding basé sur le hashing, les données sont introduites dans une fonction de hachage pour déterminer le shard dans lequel chaque valeur de données doit aller.
Une fonction de hashing prend un élément de données d’entrée et génère une valeur de sortie discrète, appelée valeur de hashing. Dans le cas du sharding basé sur une clé, la valeur de hachage est l’ID du shard, qui détermine dans quel shard les données sont stockées. Les valeurs entrées dans la fonction de hashing proviennent toutes de la même colonne, appelée clé de shard, afin de garantir que les entrées sont placées de manière cohérente et avec les données d’accompagnement appropriées dans les bons shards.
Cette clé est statique, c’est-à-dire que ses valeurs ne changent pas dans le temps. Si elles le font, cela pourrait ralentir les performances.
Avantages du sharding basé sur les clés
convient pour répartir les données de manière uniforme afin d’éviter les points chauds
pas besoin de maintenir une carte de données, puisque les données sont distribuées de manière algorithmique.
Inconvénients du sharding basé sur les clés
difficile d’ajouter ou de supprimer dynamiquement des serveurs supplémentaires dans la base de données ;
pendant le rééquilibrage des données, les nouvelles et les anciennes fonctions de hashing peuvent devenir invalides ; et
pendant la migration, les serveurs ne peuvent pas écrire de nouvelles données, ce qui peut entraîner une interruption de l’application.
Qu’est-ce que le sharding basé sur la plage ?
Comme son nom l’indique, le partage basé sur les plages implique le partage des données en fonction des plages d’une valeur donnée. La plage est basée sur un champ, appelé « clé de partage ».
Par exemple, dans le cas d’une base de données qui stocke des informations sur les notes des étudiants, les shards peuvent être utilisés pour classer les données en fonction de différentes plages de notes.
Avantages du sharding basé sur les plages
mise en œuvre simple
algorithme simple puisque les différents shards ont un schéma identique les uns aux autres, ainsi qu’à celui de la base de données originale.
Inconvénients du sharding basé sur les plages
peut créer des points chauds dans la base de données, puisque les données peuvent être réparties de façon inégale ; et
un mauvais choix de clé de shard peut créer des shards déséquilibrés et avoir un impact négatif sur les performances.
Qu’est-ce que le sharding basé sur les répertoires ?
Dans le cas du sharding basé sur un répertoire, une table de consultation est créée et maintenue. Elle utilise une clé de shard pour savoir quel shard contient quel type de données.
Avantages du sharding basé sur les répertoires
Offre une plus grande flexibilité en termes d’affectation dynamique des données aux shards ;
supérieur au sharding basé sur les clés, car il ne nécessite pas de fonction de hashing
supérieur au sharding basé sur les plages car il lie chaque clé à son propre shard spécifique.
Inconvénients du sharding basé sur les répertoires
peut avoir un impact négatif sur les performances de l’application car elle nécessite une connexion à la table de consultation avant chaque requête ou écriture
la corruption ou la défaillance de la table de consultation peut entraîner des problèmes de perte de données ou d’accessibilité.