Une introduction à la compréhension du partage de base de données

Publié: 2022-11-05

La création d'un site Web est la première étape lors de la mise en place de votre présence sur Internet. Pour prospérer à long terme, vous devez également vous assurer que votre site peut évoluer pour s'adapter à la croissance. Et l'une des premières étapes consiste à mettre en œuvre une base de données qui peut évoluer avec vous. Sinon, vous risquez de rencontrer des performances de requête lentes et des pannes de base de données.

Cet article explique comment vous pouvez utiliser le partage de base de données pour obtenir une évolutivité et une disponibilité élevées de vos données. Nous aborderons également les inconvénients du sharding et les différentes architectures de sharding que vous pouvez utiliser.

Qu'est-ce que le partage de base de données ?

Le partitionnement est une technique d'optimisation qui distribue les tables sur d'autres serveurs de base de données. C'est comme le partitionnement dans le sens où les deux impliquent de diviser les données en sous-ensembles plus petits. La différence est que le partitionnement distribue ces sous-ensembles sur différents serveurs tandis que le partitionnement les stocke dans une seule base de données. Ces serveurs utilisent le même moteur de base de données et le même type de matériel pour atteindre un niveau de performances similaire pour toutes les partitions.

Sharding vise à réaliser une architecture sans partage, éliminant les goulots d'étranglement de traitement et les points de défaillance uniques.

Une illustration pour expliquer le partage de base de données.
Un exemple de partitionnement. (Source de l'image : Analytics Vidhya)

Vous pouvez implémenter le sharding de deux manières : horizontalement et verticalement. Le partitionnement horizontal divise la table en fonction des lignes, tandis que le partitionnement vertical divise les tables en fonction des colonnes.

À cet égard, le sharding est comme le partitionnement, qui divise les grandes tables en plus petites.

Le partitionnement horizontal est efficace pour les bases de données où la plupart des requêtes renvoient un sous-ensemble de lignes, comme une base de données client qui renvoie des données (telles que le nom, l'adresse, l'e-mail, etc.) à la fois.

Le partitionnement vertical est efficace pour les bases de données dont les requêtes renvoient des colonnes uniques. Par exemple, si la base de données client renvoie le nom ou l'e-mail du client séparément, vous pouvez séparer le nom et l'e-mail dans différents clusters.

Avantages du partage de base de données

Vous trouverez ci-dessous certains des avantages du partage de base de données.

Mise à l'échelle horizontale améliorée

Vous pouvez redimensionner votre base de données verticalement ou horizontalement. La mise à l'échelle verticale consiste à ajouter davantage d'unités centrales de traitement (CPU) et de mémoire vive (RAM) au serveur pour améliorer les performances. La mise à l'échelle verticale est une solution utile pour les petites et moyennes bases de données. Cependant, à mesure que vos données augmentent, la mise à l'échelle verticale devient impossible. La puissance que vous pouvez ajouter à un seul serveur est limitée.

La mise à l'échelle horizontale est plus flexible. Il vous permet d'adapter votre base de données selon vos besoins en ajoutant plus de serveurs à votre système. Chacun de ces serveurs fournit des ressources à différents fragments de base de données. Cela répartit la charge de travail et améliore la capacité du système à traiter davantage de demandes.

Temps de réponse aux requêtes plus rapides

Les fragments n'ont que quelques lignes et colonnes. De ce fait, le traitement des requêtes de base de données prend moins de temps. En revanche, une requête sur une base de données non partitionnée peut nécessiter une recherche parmi des centaines, voire des milliers, de lignes.

Fiabilité accrue en cas de panne

Les pannes de base de données se produisent pour diverses raisons, notamment la suppression accidentelle de données, les erreurs de connexion et les attaques de cybersécurité. Le partage minimise les effets des pannes. Étant donné que chaque partition est autonome, seule la partition affectée est confrontée à un temps d'arrêt. Par exemple, si vous avez quatre partitions et que l'une d'elles subit une panne, seules 25 % des opérations seront affectées.

Inconvénients du partage

Bien que le sharding améliore la fiabilité et la disponibilité d'une base de données, sa mise en œuvre est complexe. L'utilisation d'une mauvaise architecture de partitionnement peut ralentir les performances et entraîner une perte de données.

Assurez-vous de choisir une technique de partitionnement qui permet une distribution équilibrée des données sur toutes les partitions. Sans cet équilibre, vous risquez de créer des hotspots de base de données, qui se produisent lorsqu'un fragment stocke la plupart des données tandis que les autres fragments restent pratiquement vides. Cela réduit le débit d'écriture sur le fragment unique.

Pour résoudre ce problème, vous pouvez partitionner encore plus la partition déséquilibrée, mais ce processus est difficile et peut supprimer votre base de données pendant la migration des données.

Un autre inconvénient du partitionnement est que les jointures SQL impliquant plusieurs tables dans différents fragments peuvent devenir trop lentes et dégrader les performances. Cependant, avec la bonne architecture, vous pouvez éviter ce problème.

Architectures de partage

Vous pouvez implémenter le partitionnement à l'aide de trois architectures :

  • Partage basé sur les clés
  • Partage basé sur la plage
  • Partage basé sur un répertoire

L'architecture que vous choisissez dépend de votre cas d'utilisation.

Partage basé sur des clés

Dans une architecture de partitionnement basée sur une clé ou un hachage, une application de base de données utilise une clé de partition pour localiser une partition. Une fonction de hachage hache la valeur de la clé de partitionnement et la sortie mappe les données sur une partition particulière. Une simple fonction de hachage peut être le module de la clé et le nombre de fragments.

La fonction de hachage peut prendre plusieurs clés de partitionnement. Pour cette raison, le partitionnement basé sur des clés convient aux enregistrements de données qui peuvent avoir des clés partagées. La distribution algorithmique des données minimise la possibilité de créer des hotspots de base de données où une partition contient plus de données que l'autre.

Cependant, comme la distribution ne repose que sur la fonction de hachage, il est impossible de regrouper logiquement les données. Par conséquent, les opérations de base de données qui nécessitent des données provenant de plusieurs partitions peuvent être inefficaces car elles nécessitent la lecture de données à partir de chaque partition.

Partage basé sur la plage

Le partitionnement basé sur la plage implique le partitionnement d'une base de données en fonction d'une plage de valeurs spécifiée.

Il utilise une clé de partitionnement pour déterminer à quelle partition attribuer une valeur. L'application de base de données vérifie la partition qui correspond à la clé de partitionnement dans une table de recherche et stocke les données. Pour cette raison, le partage basé sur la plage est facile à concevoir et à mettre en œuvre.

Par exemple, vous pouvez utiliser la valeur de l'ID utilisateur dans une base de données utilisateur comme clé de partitionnement. Vous pouvez stocker des utilisateurs avec des ID de 0 à 2 000 sur une partition, ceux entre 2 000 et 4 000 sur une autre partition, etc.

Le partitionnement basé sur la plage peut provoquer des points chauds de base de données. Considérez une base de données d'utilisateurs dans laquelle la plupart de vos ID utilisateur se situent entre 2 001 et 4 000. Le processus les affecte à un seul fragment, créant un déséquilibre au fil du temps. Par conséquent, le partitionnement basé sur la plage fonctionne mieux pour les données uniformément réparties.

Partage basé sur un répertoire

Le partitionnement basé sur un répertoire regroupe les données logiquement liées dans le même fragment. Il utilise une table de recherche contenant une liste de mappages pour chaque entité de la base de données. Chaque mappage correspond à un fragment de base de données.

Le partitionnement basé sur un répertoire est plus flexible que le partitionnement basé sur une plage ou sur une clé, car vous pouvez ajouter des données aux partitions de manière dynamique. Il n'y a pas de fonction de partitionnement à suivre ou de valeurs de plage à respecter. Cette flexibilité augmente l'efficacité de la base de données : vous pouvez stocker les données associées dans une seule partition, ce qui signifie que l'exécution des requêtes courantes prend moins de temps.

Par exemple, si vous avez utilisé le partitionnement basé sur un répertoire et regroupé les utilisateurs en fonction de leur emplacement, en récupérant les utilisateurs à partir d'un emplacement particulier, vous n'interrogez qu'un seul fragment.

Partage de base de données avec Kinsta

La plupart des moteurs de base de données modernes prennent en charge le partage de base de données. L'un de ces moteurs de base de données est MariaDB, un fork de MySQL pris en charge commercialement. Il s'agit d'un système de base de données open source très performant adopté par des sociétés comme IBM, GitHub et Wikimedia. Il fait également partie de la pile de serveurs hautes performances de Kinsta.

MariaDB offre des fonctionnalités de partitionnement intégrées via le moteur de stockage spider. Le moteur de stockage spider est un moteur de formation de cluster qui prend en charge le partitionnement et les transactions d'architecture étendue (XA). Il vous permet de traiter les tables distantes de différentes instances comme si elles se trouvaient dans la même instance. Une fois que vous avez créé une table dans le moteur de stockage spider, la table est liée à une autre table sur le serveur MariaDB distant. Une fois la connexion établie, le moteur de stockage partage le lien avec toutes les tables faisant partie de la même transaction.

Sommaire

Le partitionnement de base de données est une technique de mise à l'échelle qui partitionne les tables en sous-ensembles plus petits et les distribue à différents serveurs appelés fragments. Vous pouvez implémenter le partitionnement par divers moyens, comme le partitionnement basé sur les clés, le partitionnement basé sur la plage et le partitionnement basé sur les répertoires.

Bien que le partitionnement améliore l'évolutivité, la fiabilité et la disponibilité d'une base de données, il est très complexe à mettre en œuvre. De plus, une fois que vous avez créé une partition, il n'est pas facile de ramener la base de données à son état non partitionné. Pour cette raison, utilisez le partitionnement pour l'optimisation uniquement lorsque vous êtes sûr que les autres options d'évolutivité ne fonctionneront pas.

Que votre entreprise soit une entreprise à but non lucratif ou une entreprise, les solutions expertes de Kinsta peuvent vous soulager de vos soucis d'hébergement de site, vous permettant de vous concentrer sur ce qui compte le plus.