这么多组件如何选择 ?

为了适应各种体量的项目,所以 MixPHP 的数据库组件很多,通常根据项目现在的体量与架构来选择:

  1. 通常使用 Pdo / Redis 即可。
  2. 当项目为单台数据库服务器时,且全部代码服务器的 worker 进程之和小于数据库的最大连接数较多时,
    可使用 PdoPersistent / RedisPersistent ,可提升两倍左右的并发性能。
  3. 当项目为多台数据库服务器作主从架构时,使用 PdoMasterSlave

总结一话:单数据库服务器时,使用长连接性能更好,但不适合数据库服务器最大连接数偏小的情况。

如何连接多个库 ?

方法一:

适合多个库都频繁调用的情况。

在配置文件中增加一个新的数据库组件,比如:

// 数据库 A
'rdbUser'      => [
    // 类路径
    'class'                           => 'mix\rdb\Pdo',
    // 数据源格式
    'dsn'                             => 'mysql:host=127.0.0.1;port=3306;charset=utf8;dbname=user',
    // 数据库用户名
    'username'                        => 'root',
    // 数据库密码
    'password'                        => '',
    // 设置PDO属性: http://php.net/manual/zh/pdo.setattribute.php
    'attribute'                       => [
        // 设置默认的提取模式: \PDO::FETCH_OBJ | \PDO::FETCH_ASSOC
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    ],
],

// 数据库 B
'rdbLog'      => [
    // 类路径
    'class'                           => 'mix\rdb\Pdo',
    // 数据源格式
    'dsn'                             => 'mysql:host=127.0.0.1;port=3306;charset=utf8;dbname=log',
    // 数据库用户名
    'username'                        => 'root',
    // 数据库密码
    'password'                        => '',
    // 设置PDO属性: http://php.net/manual/zh/pdo.setattribute.php
    'attribute'                       => [
        // 设置默认的提取模式: \PDO::FETCH_OBJ | \PDO::FETCH_ASSOC
        \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    ],
],

方法一:

适合少量调用另一个库的情况。

使用配置创建数据库对象,在应用配置 objects 字段中加上另一个库的配置,例如:

'objects' => [

    // 数据库 B
    'rdbLog'      => [
        // 类路径
        'class'                           => 'mix\rdb\Pdo',
        // 数据源格式
        'dsn'                             => 'mysql:host=127.0.0.1;port=3306;charset=utf8;dbname=log',
        // 数据库用户名
        'username'                        => 'root',
        // 数据库密码
        'password'                        => '',
        // 设置PDO属性: http://php.net/manual/zh/pdo.setattribute.php
        'attribute'                       => [
            // 设置默认的提取模式: \PDO::FETCH_OBJ | \PDO::FETCH_ASSOC
            \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
        ],
    ],
    
],

然后使用上面定义的配置信息创建一个数据库对象:

$rdbLog = \Mix::app()->createObject('rdbLog');