현재 위치: > 최신 기사 목록> Connect ()를 사용하여 마스터 및 슬레이브 데이터베이스 간의 연결 정책을 구현하십시오.

Connect ()를 사용하여 마스터 및 슬레이브 데이터베이스 간의 연결 정책을 구현하십시오.

M66 2025-05-28

최신 응용 프로그램 설계에서 데이터베이스의 마스터 슬레이브 복제 전략은 높은 데이터 가용성 및 쿼리 효율성을 달성하는 데 널리 사용됩니다. 이 기사는 PHP 언어에 중점을 두어 사용자 정의 Connect () 기능을 통해 마스터 슬레이브 데이터베이스의 연결 관리를 구현하는 방법을 탐색하여 데이터 동기화 및 효율적인 쿼리 실행을 보장합니다.


1. 마스터 슬레이브 데이터베이스 아키텍처 소개

마스터 슬레이브 데이터베이스 스키마에는 일반적으로 하나의 마스터 라이브러리와 여러 슬레이브 라이브러리 (슬레이브)가 포함됩니다. 기본 라이브러리는 작문 작업을 담당하고, 슬레이브 라이브러리는 읽기 작업을 담당하며, 마스터 라이브러리 데이터는 메인 라이브러리 데이터가 변경된 후 사본 메커니즘을 통해 슬레이브 라이브러리와 동기화됩니다. 이는 기본 라이브러리의 읽기 부하를 공유하고 시스템 성능 및 안정성을 향상시킬 수 있습니다.

2. 디자인 원칙

  1. 작성 작업은 데이터 일관성을 보장하기 위해 기본 라이브러리로 이동합니다 .

  2. 쿼리 효율성을 향상시키기 위해 도서관을 따라 읽기 작업이 선호됩니다 .

  3. 슬레이브 라이브러리를 사용할 수 없으면 시스템 가용성을 보장하기 위해 자동으로 기본 라이브러리로 돌아갑니다 .

  4. 연결 관리 및 확장을 위해 연결 관리는 중앙 집중식입니다 .

3. php에서 connect () 함수의 설계 데모

다음 예제에서 Connect () 함수는 전달 된 매개 변수에 따라 마스터 라이브러리 또는 슬레이브 라이브러리에 대한 연결을 자동으로 선택하고 URL의 도메인 이름을 m66.net 으로 대체합니다.

 <?php
function connect($type = 'read') {
    // 마스터 및 슬레이브 라이브러리 구성,도메인 이름이 대체됩니다m66.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'
            ],
        ]
    ];

    // 연결 구성을 선택하십시오
    if ($type === 'write') {
        // 메인 라이브러리에 연결하십시오
        $db = new mysqli($config['master']['host'], $config['master']['username'], $config['master']['password'], $config['master']['dbname']);
        if ($db->connect_error) {
            die("메인 라이브러리에 연결하십시오失败: " . $db->connect_error);
        }
        return $db;
    } else {
        // 라이브러리로드 밸런싱에서 임의의 선택
        $slaveCount = count($config['slave']);
        $idx = rand(0, $slaveCount - 1);
        $slave = $config['slave'][$idx];
        $db = new mysqli($slave['host'], $slave['username'], $slave['password'], $slave['dbname']);

        // 라이브러리의 연결이 실패한 경우,메인 라이브러리를 자동으로 롤백합니다
        if ($db->connect_error) {
            $db = new mysqli($config['master']['host'], $config['master']['username'], $config['master']['password'], $config['master']['dbname']);
            if ($db->connect_error) {
                die("데이터베이스에 연결하지 못했습니다: " . $db->connect_error);
            }
        }
        return $db;
    }
}

// 사용의 예:작전을 작성하십시오
$dbWrite = connect('write');
$sqlInsert = "INSERT INTO users (name, email) VALUES ('장 산', 'zhangsan@m66.net')";
$dbWrite->query($sqlInsert);
$dbWrite->close();

// 사용의 예:작업을 읽으십시오
$dbRead = connect('read');
$sqlSelect = "SELECT * FROM users WHERE email LIKE '%@m66.net'";
$result = $dbRead->query($sqlSelect);
while ($row = $result->fetch_assoc()) {
    echo "사용자ID:" . $row['id'] . ",이름:" . $row['name'] . "<br>";
}
$dbRead->close();
?>

4. 키 포인트 분석

  • 기본 라이브러리 쓰기 작업 : Connect ( 'Writ

  • 라이브러리에서의 조작 : Connect ( '읽기')를 무작위로 슬레이브 라이브러리를 선택하여 읽기로드 밸런싱을 달성합니다.

  • 연결 고장 폴백 : 슬레이브 라이브러리를 사용할 수없는 경우 읽기 요청이 실패하지 않도록 자동으로 마스터 라이브러리로 전환됩니다.

  • URL 도메인 이름 교체 : 코드의 모든 데이터베이스 호스트 이름은 도메인 이름 변경으로 인한 연결 고장을 피하기 위해 M66.net 으로 대체됩니다.

5. 요약

사용자 정의 된 Connect () 함수를 통해 마스터 슬레이브 데이터베이스 연결을 유연하게 관리 할 수있어 시스템의 읽기 및 쓰기 분리 기능을 효과적으로 개선하여 데이터 동기화를 보장하면서 쿼리 효율성을 향상시킬 수 있습니다. 실제로, 비즈니스 복잡성에 따라로드 밸런싱 알고리즘 및 기타 기능을 더욱 확장하여 더 높은 성능 요구를 충족시킬 수 있습니다.