Conception et pratique du sharding horizontal de base de données : application en programmation PHP

WBOY
Libérer: 2023-06-23 11:28:01
original
1661 Les gens l'ont consulté

Conception et pratique du partitionnement horizontal de base de données : application en programmation PHP

À mesure que la quantité de données augmente, comment mieux gérer et optimiser la base de données est devenue une préoccupation pour chaque développeur. Parmi eux, le partitionnement horizontal de la base de données est une méthode d'optimisation très courante. Cet article présentera le concept, le principe, la conception et la pratique du partitionnement horizontal des bases de données, et se concentrera sur la façon d'utiliser cette technologie dans la programmation PHP.

1. Le concept et le principe du partitionnement horizontal

Le partitionnement horizontal fait référence à la dispersion horizontale des données d'une table en plusieurs tables physiques selon un certain champ. Par exemple, nous divisons une table utilisateur en plusieurs tables en fonction de la plage de valeurs de l'ID utilisateur, telle que user_0, user_1, user_2, etc. À ce stade, lorsque vous interrogez des informations utilisateur, vous devez d'abord calculer le nom de la table via l'ID, puis rechercher des données dans la table correspondante.

La fonction principale du partitionnement horizontal est de diviser une grande table en petites tables pour résoudre le problème de la faible efficacité des requêtes lorsqu'une seule table est trop grande. De plus, étant donné que les données des différentes tables sont stockées indépendamment, le déploiement distribué et le traitement à haute disponibilité peuvent être facilement réalisés.

2. Conception du partitionnement horizontal

Lors de la conception du partitionnement horizontal, nous devons prendre en compte les problèmes suivants :

  1. Quel champ doit être utilisé comme champ de partitionnement.
  2. La granularité du sharding.
  3. Comment maintenir la cohérence des données fragmentées.
  4. Comment gérer les problèmes de requêtes entre fragments.

Résolvons ces problèmes un par un.

  1. Sélection de la clé de partitionnement

La sélection de la clé de partitionnement est la clé de la conception de partitionnement horizontal, qui affecte directement la qualité de l'effet de partitionnement. Habituellement, nous choisirons la clé primaire ou l'index unique d'une certaine table comme clé de partitionnement. Le champ à choisir comme clé de partitionnement doit être décidé en fonction de conditions commerciales spécifiques, par exemple, partitionnement basé sur l'ID utilisateur, partitionnement basé sur l'état de la commande, etc.

  1. Granularité de partage

Après avoir sélectionné le champ de partage, nous devons également prendre en compte la granularité de partage. Plus la granularité du partitionnement est fine, plus le volume de données d'une seule table sera petit et l'efficacité des requêtes sera améliorée en conséquence. Cependant, la granularité du partitionnement ne peut pas être trop petite et un trop grand nombre de tables physiques ne favorise pas la gestion et la maintenance des bases de données.

  1. Cohérence des données fragmentées

Après le partitionnement, nous devons réfléchir à la manière de stocker différentes données sous la même clé de partitionnement dans différentes tables physiques tout en garantissant la cohérence de ces données. Il existe deux méthodes de mise en œuvre spécifiques :

(1) Partage vertical : placez différents champs dans différentes tables. Par exemple, les informations de base de l'utilisateur et les informations de commande sont stockées dans différentes tables. L'avantage de cette méthode est qu'il n'est pas nécessaire de prendre en compte le problème des jointures entre tables et qu'elle évite également le problème de cohérence des données entre les enregistrements de tables croisées.

(2) Partage horizontal : répartissez les données de la même table dans plusieurs tables physiques. L'avantage de cette méthode est qu'elle permet d'utiliser pleinement les ressources matérielles tout en évitant le problème d'un volume de données excessif dans une seule table. Cependant, les problèmes de requêtes croisées et de cohérence des données doivent être pris en compte, et certaines technologies spéciales doivent être utilisées pour éviter ces problèmes.

  1. Gestion des problèmes de requêtes entre fragments

Lors d'une interrogation sur plusieurs fragments, nous devons d'abord déterminer la liste des fragments impliqués dans la requête, puis effectuer des opérations de requête sur ces fragments. Si la condition de requête contient la clé de partition, la requête peut être directement placée dans la table physique correspondante ; si la condition de requête n'inclut pas la clé de partition, la requête doit être effectuée dans toutes les partitions, puis les résultats seront fusionnés et retourné au client. Bien que cela puisse résoudre le problème des requêtes sur plusieurs fragments, cela nécessite des coûts de ressources et de temps plus élevés.

3. Utilisez PHP pour implémenter le partitionnement horizontal

Dans les applications PHP, nous pouvons implémenter le partitionnement horizontal via des frameworks tels que ShardingSphere et Doctrine ORM. Ici, nous prenons ShardingSphere comme exemple pour présenter comment utiliser ce framework pour implémenter le partitionnement horizontal.

ShardingSphere est le middleware de base de données distribué open source de premier ordre en Chine, proposant deux versions : Java et PHP. L'implémentation spécifique est la suivante :

  1. Tout d'abord, nous devons ajouter la dépendance ShardingSphere dans le fichier de configuration composer.json :

"require": {
"php": "^7.2.5",
"sharding- sphere/sharding-proxy": "^5.3",
"sharding-sphere/sharding-core": "^5.3"
}

  1. Ensuite, la logique de démarrage de ShardingSphere doit être ajoutée au code PHP. Prenant l'exemple de mysql, nous devons ajouter ce qui suit au code de démarrage:


User ShardingsPheReshardingAutoConfiguration;


$ parser = new ShardingsPhereParserMysqlmysqlParser ();

$ exécutor = new ShardingsPhereExecutoreXecutorEngine () () ;

$shardingConfig->setDataSource($dataSource); // Définir la source de données

$shardingConfig->setShardingRule($shardingRuleConfig); // Définir les règles de partitionnement

$config = new ShardingSphereProxyCommandLineConfig();

🎜 $ instance = nouveau ShardingSphereProxyShardingInstanceLoader($parser, $executor);🎜🎜$instance->load($config, $shardingConfig);🎜
  1. Enfin, nous devons écrire des règles de partitionnement correspondantes basées sur des conditions commerciales spécifiques.

Des règles de partitionnement spécifiques doivent être formulées sur la base de scénarios commerciaux spécifiques. Par exemple, pour la règle de partitionnement de l'ID utilisateur, le résultat de la division de l'ID utilisateur par 10 peut être utilisé comme clé de partitionnement, puis dispersé dans plusieurs tables physiques en fonction du résultat.

À ce stade, nous avons terminé toutes les implémentations de code pour utiliser ShardingSphere afin d'implémenter le partitionnement horizontal de la base de données.

Résumé

Cet article présente le concept, le principe, la conception et la pratique du partitionnement horizontal des bases de données, et explique comment utiliser le framework ShardingSphere pour implémenter le partitionnement horizontal dans la programmation PHP. Grâce au partitionnement horizontal, nous pouvons diviser les grandes tables en petites tables, améliorer l'efficacité des requêtes et faciliter le déploiement distribué et le traitement à haute disponibilité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!