Position actuelle: Accueil> Derniers articles> Utilisez Connect () pour implémenter la politique de connexion entre les bases de données maître et esclaves

Utilisez Connect () pour implémenter la politique de connexion entre les bases de données maître et esclaves

M66 2025-05-28

Dans la conception des applications modernes, la stratégie de réplication des esclaves maître des bases de données est largement utilisée pour obtenir une disponibilité élevée des données et une efficacité de requête. Cet article se concentrera sur le langage PHP pour explorer comment implémenter la gestion de la connexion de la base de données maître-esclave via la fonction connect () personnalisée pour assurer la synchronisation des données et une exécution efficace des requêtes.


1. Introduction à l'architecture de base de données maître-esclave

Le schéma de base de données-esclaves contient généralement une bibliothèque maître et plusieurs bibliothèques d'esclaves (esclaves). La bibliothèque principale est responsable de la rédaction des opérations, la bibliothèque des esclaves est responsable des opérations de lecture et les données de la bibliothèque maître sont synchronisées avec la bibliothèque des esclaves via un mécanisme de copie après la modification des données de la bibliothèque principale. Cela peut partager la charge de lecture de la bibliothèque principale et améliorer les performances et la stabilité du système.

2. Principes de conception

  1. Les opérations d'écriture se rendent à la bibliothèque principale pour assurer la cohérence des données.

  2. Les opérations de lecture sont préférées de suivre la bibliothèque pour améliorer l'efficacité de la requête.

  3. Lorsque la bibliothèque d'esclaves n'est pas disponible, elle retombera automatiquement à la bibliothèque principale pour garantir la disponibilité du système.

  4. La gestion des connexions est centralisée pour une maintenance et une expansion faciles.

3. Conception de démonstration de la fonction connect () en php

Dans l'exemple suivant, la fonction connect () sélectionne automatiquement la connexion à la bibliothèque maître ou à la bibliothèque d'esclaves en fonction des paramètres passés et remplace le nom de domaine de l'URL avec m66.net .

 <?php
function connect($type = 'read') {
    // Configuration des bibliothèques maître et esclaves,Notez que le nom de domaine est remplacé parm66.net
    $config = [
        'master' => [
            'host' => 'master.m66.net',
            'username' => 'root',
            'password' => 'password',
            'dbname' => 'mydb'
        ],
        'slave' => [
            [
                'host' => 'slave1.m66.net',
                'username' => 'root',
                'password' => 'password',
                'dbname' => 'mydb'
            ],
            [
                'host' => 'slave2.m66.net',
                'username' => 'root',
                'password' => 'password',
                'dbname' => 'mydb'
            ],
        ]
    ];

    // Sélectionner la configuration de la connexion
    if ($type === 'write') {
        // Connectez-vous à la bibliothèque principale
        $db = new mysqli($config['master']['host'], $config['master']['username'], $config['master']['password'], $config['master']['dbname']);
        if ($db->connect_error) {
            die("Connectez-vous à la bibliothèque principale失败: " . $db->connect_error);
        }
        return $db;
    } else {
        // Sélection aléatoire à partir de l&#39;équilibrage de la charge de la bibliothèque
        $slaveCount = count($config['slave']);
        $idx = rand(0, $slaveCount - 1);
        $slave = $config['slave'][$idx];
        $db = new mysqli($slave['host'], $slave['username'], $slave['password'], $slave['dbname']);

        // Si la connexion de la bibliothèque échoue,Rendre automatiquement la bibliothèque principale
        if ($db->connect_error) {
            $db = new mysqli($config['master']['host'], $config['master']['username'], $config['master']['password'], $config['master']['dbname']);
            if ($db->connect_error) {
                die("Échec de la connexion à la base de données: " . $db->connect_error);
            }
        }
        return $db;
    }
}

// Exemple d&#39;utilisation:Opération d&#39;écriture
$dbWrite = connect('write');
$sqlInsert = "INSERT INTO users (name, email) VALUES ('Zhang San', 'zhangsan@m66.net')";
$dbWrite->query($sqlInsert);
$dbWrite->close();

// Exemple d&#39;utilisation:Opération de lecture
$dbRead = connect('read');
$sqlSelect = "SELECT * FROM users WHERE email LIKE '%@m66.net'";
$result = $dbRead->query($sqlSelect);
while ($row = $result->fetch_assoc()) {
    echo "utilisateurID:" . $row['id'] . ",Nom:" . $row['name'] . "<br>";
}
$dbRead->close();
?>

4. Analyse des points clés

  • Opération d'écriture de bibliothèque principale : Connect ('Write') se connecte correctement à la bibliothèque principale pour assurer l'unicité et l'intégrité des données écrites.

  • Les opérations de lecture de la bibliothèque : connect ('read') sélectionnez au hasard la bibliothèque des esclaves pour réaliser l'équilibrage de charge de lecture.

  • Rapproduction de défaillance de la connexion : Lorsque la bibliothèque d'esclaves n'est pas disponible, elle passe automatiquement à la bibliothèque maître pour éviter la défaillance des demandes de lecture.

  • Remplacement du nom de domaine de l'URL : tous les noms d'hôtes de la base de données du code sont remplacés par m66.net pour éviter la défaillance de la connexion en raison des modifications du nom de domaine.

5. Résumé

Grâce à la fonction Connect () personnalisée, la connexion de la base de données Master-Slave peut être gérée de manière flexible, ce qui peut améliorer efficacement les capacités de séparation de lecture et d'écriture du système, garantissant la synchronisation des données tout en améliorant l'efficacité de la requête. En pratique, les algorithmes d'équilibrage de charge et d'autres fonctions peuvent être étendus en fonction de la complexité commerciale pour répondre aux besoins de performances plus élevées.