Comment utiliser l'architecture distribuée de MySQL pour réaliser une expansion horizontale ?
Avec le développement rapide des applications Internet, le stockage et le traitement de grandes quantités de données sont devenus un enjeu important dans la conception des systèmes. Dans MySQL autonome traditionnel, à mesure que la quantité de données augmente, les capacités de stockage et de traitement de la machine autonome peuvent facilement devenir un goulot d'étranglement. Afin de résoudre ce problème, nous pouvons utiliser l'architecture distribuée de MySQL pour réaliser une expansion horizontale, améliorant ainsi les capacités de stockage et de traitement du système.
L'architecture distribuée de MySQL se compose principalement de deux parties : le partage de données et la gestion distribuée des transactions.
Tout d’abord, partagez les données stockées. Le partage consiste à diviser une base de données en plusieurs fragments indépendants, chaque fragment stockant une partie des données. Pendant le processus de partitionnement, nous devons mettre en œuvre une stratégie de partitionnement raisonnable basée sur les caractéristiques des données pour garantir que les données sont réparties uniformément en différents fragments, améliorant ainsi l'efficacité de la requête de données. Les stratégies de partitionnement couramment utilisées incluent le partitionnement basé sur une plage, le partitionnement basé sur le hachage et le partitionnement basé sur une liste. Ce qui suit utilise le partitionnement basé sur la plage comme exemple.
Supposons que nous ayons une table utilisateur contenant des champs tels que l'identifiant, le nom et l'âge de l'utilisateur. Nous pouvons partitionner en fonction de l'ID de l'utilisateur, en stockant les utilisateurs avec des ID utilisateur allant de 1 à 100 dans une partition, les utilisateurs avec des ID utilisateur allant de 101 à 200 dans une autre partition, et ainsi de suite. De cette façon, lors de l'interrogation des données utilisateur, nous pouvons interroger les fragments correspondants en fonction de la plage d'ID utilisateur pour améliorer l'efficacité des requêtes.
Ensuite, nous devons synchroniser les données entre différents fragments. Dans MySQL, vous pouvez utiliser le mécanisme de réplication pour réaliser la synchronisation des données. Le mécanisme de réplication comprend principalement deux parties : le nœud maître et le nœud esclave. Le nœud maître est chargé de recevoir les opérations d'écriture et d'enregistrer les opérations d'écriture dans le journal binaire ; le nœud esclave réalise la synchronisation des données en lisant le journal binaire du nœud maître. Lorsque le nœud maître reçoit une opération d'écriture, il enregistre l'opération d'écriture dans le journal binaire et l'envoie au nœud esclave en même temps. Après avoir reçu le journal, le nœud esclave relit l'opération de journal pour réaliser la synchronisation des données.
Dans une architecture distribuée, nous pouvons définir chaque fragment comme nœud maître-esclave. Lorsqu'une opération d'écriture se produit, déterminez d'abord quelle partition utiliser, puis utilisez le nœud maître de cette partition comme nœud maître et les nœuds maîtres des autres partitions comme nœuds esclaves. De cette manière, lorsqu'une opération d'écriture se produit, le nœud maître est responsable de la réception de l'opération d'écriture et de l'enregistrement de l'opération dans le journal binaire, et les autres nœuds esclaves réalisent la synchronisation des données en lisant le journal binaire du nœud maître. De cette façon, tous les fragments seront mis à jour de manière synchrone pour assurer la cohérence des données.
Ce qui suit montrera comment implémenter une architecture distribuée évolutive horizontalement dans MySQL. Tout d’abord, nous devons créer plusieurs fragments et configurer leur relation maître-esclave. En prenant comme exemple le partitionnement basé sur une plage, nous créons trois partitions, représentant les plages d'ID utilisateur de 1 à 100, 101 à 200 et 201 à 300.
-- 创建分片数据库 CREATE DATABASE db_1; CREATE DATABASE db_2; CREATE DATABASE db_3; -- 创建分片表 CREATE TABLE db_1.user ( id INT PRIMARY KEY, name VARCHAR(20), age INT ); CREATE TABLE db_2.user ( id INT PRIMARY KEY, name VARCHAR(20), age INT ); CREATE TABLE db_3.user ( id INT PRIMARY KEY, name VARCHAR(20), age INT ); -- 配置主从关系 ALTER TABLE db_1.user ADD COLUMN imaster INT DEFAULT 0; ALTER TABLE db_2.user ADD COLUMN imaster INT DEFAULT 0; ALTER TABLE db_3.user ADD COLUMN imaster INT DEFAULT 0; -- 设置主节点 UPDATE db_1.user SET imaster = 1 WHERE id BETWEEN 1 AND 100; UPDATE db_2.user SET imaster = 1 WHERE id BETWEEN 101 AND 200; UPDATE db_3.user SET imaster = 1 WHERE id BETWEEN 201 AND 300; -- 设置从节点 CREATE TABLE db_1.user_slave ( id INT PRIMARY KEY, name VARCHAR(20), age INT, imaster INT DEFAULT 0 ); CREATE TABLE db_2.user_slave ( id INT PRIMARY KEY, name VARCHAR(20), age INT, imaster INT DEFAULT 0 ); CREATE TABLE db_3.user_slave ( id INT PRIMARY KEY, name VARCHAR(20), age INT, imaster INT DEFAULT 0 ); -- 插入数据 INSERT INTO db_1.user(id, name, age) VALUES (1, '张三', 20); INSERT INTO db_2.user(id, name, age) VALUES (101, '李四', 25);
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!