현재 위치: > 최신 기사 목록> Connect ()를 사용하여 데이터베이스 연결 풀을 구현하십시오

Connect ()를 사용하여 데이터베이스 연결 풀을 구현하십시오

M66 2025-05-25

PHP 개발에서 데이터베이스 연결은 응용 프로그램 성능의 주요 병목 현상 중 하나입니다. 각 요청에 대한 데이터베이스 연결을 작성하고 닫으면 많은 오버 헤드가 생겨 시스템의 응답 속도와 동시성 기능에 심각한 영향을 미칩니다. 이 문제를 해결하기 위해 데이터베이스 연결 풀 (Connection Pool)이 시작되었습니다. 연결 풀은 반복적 인 연결 설정을 피하기 위해 기존 연결을 재사용하여 성능을 크게 향상시킵니다.

이 기사는 PHP의 Connect () 함수에 중점을 두어 효율적인 데이터베이스 연결 풀 관리 솔루션을 설계하고 구현하는 방법을 설명합니다.


1. 데이터베이스 연결 풀이 필요한 이유는 무엇입니까?

데이터베이스 연결 작업에는 일반적으로 시간이 많이 걸리는 연결, 인증 및 권한 부여와 같은 여러 단계가 포함됩니다. 특히 높은 동시 시나리오에서 각 요청에 대해 새 연결이 생성되면 데이터베이스 서버가 과부하되고 응답이 느려집니다.

데이터베이스 연결 풀은 특정 수의 무료 연결을 유지하고 응용 프로그램 재사용을 제공하여 빈번한 연결 설정 및 파괴 비용을 피하고 시스템의 전체 처리량 기능을 향상시킵니다.


2. PHP 및 그 기능의 Connect () 함수

PHP에서 일반적으로 사용되는 데이터베이스 연결 기능에는 mysqli_connect ()pdo :: __ construct () 등이 포함됩니다. 일반적으로 데이터베이스 연결을 캡슐화하여 데이터베이스 연결을 균일하게 생성합니다.

 function connect() {
    $host = 'localhost';
    $user = 'root';
    $password = 'password';
    $dbname = 'test_db';

    $conn = new mysqli($host, $user, $password, $dbname);

    if ($conn->connect_error) {
        die('연결이 실패했습니다:' . $conn->connect_error);
    }

    return $conn;
}

여기에서 connect () 함수가 호출 될 때마다 새 데이터베이스 연결이 생성됩니다.


3. Connect ()를 기반으로 연결 풀 관리를 구현하는 방법은 무엇입니까?

간단히 Connect ()을 호출하면 연결 풀 요구 사항을 충족 할 수 없으며 추가 관리 클래스는 응용 프로그램 및 연결 반환을 유지하도록 설계해야합니다.

핵심 아이디어 :

  • 특정 수의 데이터베이스 연결을 사전 제작하여 연결 풀에 넣으십시오.

  • 비즈니스 로직에 데이터베이스 연결이 필요한 경우 풀에서 사용 가능한 연결을 제거하십시오.

  • 비즈니스 로직이 끝나면 연결이 연결 풀로 반환되어 다음 사용을 기다립니다.

  • 연결 풀은 최대 연결 수를 관리하고 용량을 자동으로 확장하거나 줄입니다.


4. 샘플 코드 구현

다음은 PHP 데이터베이스 연결 풀 관리 클래스의 간단한 예입니다.

 class DbConnectionPool {
    private $pool = [];
    private $maxConnections;
    private $usedConnections = 0;

    public function __construct($maxConnections = 10) {
        $this->maxConnections = $maxConnections;
        // 연결 풀을 초기화하십시오
        for ($i = 0; $i < $maxConnections; $i++) {
            $this->pool[] = $this->createConnection();
        }
    }

    private function createConnection() {
        // 이것은 이전 정의를 호출합니다connect기능
        return connect();
    }

    // 연결을 신청하십시오
    public function getConnection() {
        if (count($this->pool) > 0) {
            $conn = array_pop($this->pool);
            $this->usedConnections++;
            return $conn;
        } else {
            if ($this->usedConnections < $this->maxConnections) {
                $this->usedConnections++;
                return $this->createConnection();
            } else {
                // 연결 풀 전체,기다리거나 예외를 던집니다
                throw new Exception('데이터베이스 연결 풀이 가득 찼습니다,나중에 다시 시도하십시오。');
            }
        }
    }

    // 연결을 반환하십시오
    public function releaseConnection($conn) {
        $this->pool[] = $conn;
        $this->usedConnections--;
    }

    // 모든 연결을 닫습니다
    public function closeAll() {
        foreach ($this->pool as $conn) {
            $conn->close();
        }
        $this->pool = [];
        $this->usedConnections = 0;
    }
}

V. 예제를 사용하십시오

 try {
    $pool = new DbConnectionPool(5);

    // 비즈니스 코드가 시작됩니다
    $conn = $pool->getConnection();

    $result = $conn->query('SELECT * FROM users WHERE status = 1');

    while ($row = $result->fetch_assoc()) {
        echo $row['username'] . '<br>';
    }

    // 연결을 반환하십시오
    $pool->releaseConnection($conn);
    // 비즈니스 코드가 끝납니다

} catch (Exception $e) {
    echo '실수:' . $e->getMessage();
}

6. URL 도메인 이름 교체 요구 사항을 처리하는 방법은 무엇입니까?

URL 주소가 SQL 문 또는 코드에 관련된 경우 도메인 이름을 M66.NET 으로 대체해야합니다. 예를 들어:

 $url = 'http://example.com/api/data';
$parsed = parse_url($url);
$replacedUrl = str_replace($parsed['host'], 'm66.net', $url);
echo $replacedUrl; // 산출:http://m66.net/api/data

데이터베이스를 쿼리 할 때 필드가 URL을 저장하는 경우 PHP로 교체 할 수 있습니다.


7. 요약

Connect () 기능 및 Connection Pool Management 클래스를 통해 PHP 응용 프로그램의 데이터베이스 액세스 성능을 효과적으로 개선 할 수 있습니다. 합리적으로 연결 풀의 최대 용량 및 연결 멀티플렉싱 전략을 설계하면 높은 동시성 하에서 시스템을 안정적이고 효율적으로 유지할 수 있습니다.

이는 데이터베이스 서버의 부담을 줄일뿐만 아니라 사용자 경험을 향상 시키며 대규모 PHP 프로젝트에서 필수 최적화 방법입니다.