데이터베이스 빠른 시작(기반 Laravel 데이터베이스 컴포넌트)

webman/databaseilluminate/database를 기반으로 개발되었으며, 연결 풀 기능이 추가되어 협코루틴 및 비협코루틴 환경을 지원합니다. 사용법은 laravel과 동일합니다.

개발자는 다른 데이터베이스 컴포넌트 사용하기 장을 참고하여 ThinkPHP 또는 다른 데이터베이스를 사용할 수 있습니다.

주의
현재 매뉴얼은 webman-v2 버전으로, webman-v1 버전을 사용하고 있다면 v1 버전 매뉴얼을 참조하십시오.

데이터베이스 설치

composer require -W webman/database illuminate/pagination illuminate/events symfony/var-dumper

설치 후에는 restart를 해야 합니다(reload는 효과가 없습니다).


webman/database는 laravel의 illuminate/database에 의존하므로, 설치 시 illuminate/database의 의존 패키지가 자동으로 설치됩니다.

주의
페이지 매김, 데이터베이스 이벤트, SQL 기록이 필요하지 않은 경우에는 다음 명령어만 실행하면 됩니다.
composer require -W webman/database

데이터베이스 설정

config/database.php


return [
    // 기본 데이터베이스
    'default' => 'mysql',

    // 다양한 데이터베이스 설정
    'connections' => [
        'mysql' => [
            'driver'      => 'mysql',
            'host'        => '127.0.0.1',
            'port'        => 3306,
            'database'    => 'test',
            'username'    => 'root',
            'password'    => '',
            'unix_socket' => '',
            'charset'     => 'utf8',
            'collation'   => 'utf8_unicode_ci',
            'prefix'      => '',
            'strict'      => true,
            'engine'      => null,
            'options' => [
                PDO::ATTR_EMULATE_PREPARES => false, // swoole 또는 swow를 드라이버로 사용할 때 필수입니다.
            ],
            'pool' => [ // 연결 풀 설정
                'max_connections' => 5, // 최대 연결 수
                'min_connections' => 1, // 최소 연결 수
                'wait_timeout' => 3,    // 연결 풀에서 연결을 가져올 때 대기 가능한 최대 시간, 초과 시 예외가 발생합니다. 협코루틴 환경에서만 유효합니다.
                'idle_timeout' => 60,   // 연결 풀 내 연결 최대 유휴 시간, 초과 시 회수되어 닫힙니다. 연결 수가 min_connections가 될 때까지.
                'heartbeat_interval' => 50, // 연결 풀 심장 박동 검사 시간, 단위 초, 60초 미만을 권장합니다.
            ],
        ],
    ],
];

pool 설정 외에는 나머지 설정이 laravel과 동일합니다.

연결 풀에 대하여

  • 각 프로세스는 자신의 연결 풀을 가지며, 프로세스 간에 연결 풀이 공유되지 않습니다.
  • 협코루틴을 사용하지 않는 경우, 비즈니스는 프로세스 내에서 순차적으로 실행되며, 동시에 처리되지 않으므로 연결 풀은 최대 1개의 연결만 가집니다.
  • 협코루틴을 활성화하면, 비즈니스가 프로세스 내에서 동시에 실행되며, 연결 풀은 필요에 따라 동적으로 연결 수를 조정하며, 최대 max_connections를 초과하지 않고 최소 min_connections 이하로 떨어지지 않습니다.
  • 연결 풀의 연결 수가 최대 max_connections로 제한되기 때문에, 데이터베이스 조작의 협코루틴 수가 max_connections를 초과하면, 대기하는 협코루틴이 발생하며, 최대 wait_timeout초 동안 대기하고, 초과 시 예외가 발생합니다.
  • 유휴 상태일 때(협코루틴과 비협코루틴 환경 모두), 연결은 idle_timeout 시간 후 회수되어 닫히며, 연결 수가 min_connections에 도달할 때까지 진행됩니다(min_connections는 0일 수 있습니다).

데이터베이스 사용 예시

<?php
namespace app\controller;

use support\Request;
use support\Db;

class UserController
{
    public function db(Request $request)
    {
        $default_uid = 29;
        $uid = $request->get('uid', $default_uid);
        $name = Db::table('users')->where('uid', $uid)->value('username');
        return response("hello $name");
    }
}

우리는 laravel과 유사한 사용법을 확인할 수 있으며, Db::table() 메서드를 사용하여 데이터베이스에 접근합니다.