Sobes.tech
Middle+

Qu'est-ce que le sharding horizontal?

sobes.tech IA

Réponse de l'IA

Le sharding horizontal est une technique de mise à l'échelle des bases de données qui consiste à diviser les données en parties, appelées shards, et à répartir ces shards sur plusieurs serveurs indépendants. Chaque shard contient un sous-ensemble de toutes les lignes de la table, tout en conservant toutes les colonnes.

Avantages du sharding horizontal :

  • Scalabilité : Permet de gérer une croissance du volume de données et de trafic en ajoutant de nouveaux serveurs pour stocker les shards.
  • Performance : Réduit la quantité de données avec lesquelles chaque serveur doit travailler, accélérant l'exécution des requêtes.
  • Disponibilité : Si un shard devient inaccessible, les autres shards continuent de fonctionner.
  • Réduction de la charge : Répartit la charge d'entrée/sortie entre plusieurs serveurs.

Inconvénients du sharding horizontal :

  • Complexité : La mise en œuvre et la gestion du sharding nécessitent des efforts d'ingénierie importants.
  • Transactions distribuées : Les transactions impliquant plusieurs shards sont complexes à réaliser et peuvent diminuer la performance.
  • Rebalancement : La redistribution des données entre shards lors d'une modification de la charge ou de l'ajout de nouveaux serveurs peut être un processus complexe et gourmand en ressources.
  • Requêtes entre shards : Les requêtes nécessitant de combiner des données provenant de différents shards (requêtes avec JOIN) peuvent être inefficaces.

Méthodes de sharding :

  • Sharding par plage : Les données sont réparties en fonction d'une plage de valeurs dans la clé de sharding.
  • Sharding par hachage : Les données sont réparties en fonction de la valeur de hachage de la clé de sharding.
  • Sharding par répertoire : Une table de correspondance indique sur quel shard se trouvent certaines données ou plages de données.

Exemple simplifié de concept de sharding :

Une table d'utilisateurs avec un grand volume de données. Au lieu de stocker tous les utilisateurs sur un seul serveur, on peut les diviser en shards selon la première lettre du nom de famille :

  • Shard 1 : Utilisateurs avec noms de famille de A à E
  • Shard 2 : Utilisateurs avec noms de famille de J à L
  • Shard 3 : Utilisateurs avec noms de famille de M à S
  • Shard 4 : Utilisateurs avec noms de famille de T à Y

Chaque shard est stocké sur un serveur séparé.

<?php

// Fonction d'exemple pour déterminer le shard en fonction du nom de famille
function determineShardByLastName(string $lastName): int
{
    $firstLetter = mb_strtoupper(mb_substr($lastName, 0, 1));

    if ($firstLetter >= 'А' && $firstLetter <= 'Е') {
        return 1;
    } elseif ($firstLetter >= 'Ж' && $firstLetter <= 'Л') {
        return 2;
    } elseif ($firstLetter >= 'М' && $firstLetter <= 'С') {
        return 3;
    } elseif ($firstLetter >= 'Т' && $firstLetter <= 'Я') {
        return 4;
    }

    return 0; // Retourne 0 pour les cas indéfinis
}

// Utilisation
$lastName = "Иванов";
$shardId = determineShardByLastName($lastName);
// Dans un système réel, il faudrait se connecter à la base de données du shard correspondant

?>