ci框架 mysql 超时时间_swoft2 小白教程系列-mysql配置

简介

Swoft 数据库组件高度兼容 Laravel,支持原生 SQL、查询构造器和 Eloquent ORM,去掉了复杂的对象模型关联。数据库组件采用原生 PDO 的方式连接,IO 操作会被自动转换为类似 Swoole 的 MySQL 协程客户端,使开发变得简单,更贴近传统框架。

基础配置

数据库的配置位于 app/bean.php 文件,未使用繁琐的 .env 环境文件配置。配置的 db 是一个 bean 对象。

return [
    'db' => [
        'class'    => SwoftDbDatabase::class,
        'dsn'      => 'mysql:dbname=dbname;host=127.0.0.1:3306',
        'username' => 'test',
        'password' => 'test',
        'charset'  => 'utf8mb4',
        'prefix'   => 't_',
        'options'  => [
            PDO::ATTR_CASE => PDO::CASE_NATURAL
        ],
        'config'   => [
            'collation' => 'utf8mb4_unicode_ci',
            'strict'    => true,
            'timezone'  => '+8:00',
            'modes'     => 'NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES', 
            'fetchMode' => PDO::FETCH_ASSOC
        ]
    ]
];
一般只需要修改 dsn,username,password,prefix这4个值即可,其他保持默认配置。

配置项说明:

  • class:数据库类。自定义时需指定,默认为 Swoft 数据库类
  • dsn:PDO 连接信息,指定数据库名称、地址及端口
  • username:数据库用户名
  • password:数据库密码
  • charset:数据库字符集
  • prefix:数据表前缀
  • options:PDO 选项,参阅:PHP: PDO::setAttribute - Manual
    • config:额外配置
    • collation:字符集排序规则
    • strict:是否启用严格模式
    • timezone:时区设置。国内请设置 +8:00
    • modes:连接模式,完整列表参考:MySQL :: MySQL 5.6 Reference Manual - Full List of SQL Modes
    • fetchMode:PDO 获取模式,默认为 PDO::FETCH_ASSOC,即以关联数组返回,参考:PHP: PDO 预定义常量 - Manual

读写分离

'db'               => [
    'class'    => Database::class,
    'prefix'=>'sunny_',
    'writes'=>[
        [
            'dsn'      => 'mysql:dbname=writeDB;host=127.0.0.1',
            'username' => 'root',
            'password' => 'test',
        ]
    ],
    'reads'=>[
        [
            'dsn'      => 'mysql:dbname=readDB;host=127.0.0.1',
            'username' => 'root',
            'password' => 'test',
        ]
    ]
]

连接池

DB 的连接从 连接池 创建和释放,通过 ConnectionManager 类进行管理。创建的连接为短连接,操作执行失败后会重试 一次。每当调用 toSql() 方法或执行完毕后会将连接归还至连接池中。连接池的默认名称为 db.pool,使用的数据库配置来自 bean(‘db’),由 基础配置 提供。连接池配置同样位于 app/bean.php 文件中。

 'db.pool' => [
        'class'       => SwoftDbPool::class,
        'database'    => bean('db'),
        'minActive'   => 10,
        'maxActive'   => 20,
        'maxWait'     => 0,
        'maxWaitTime' => 0,
        'maxIdleTime' => 60,
    ],

参数:

  • class 是默认的 Pool 对象 你可以更具官方的自己继承实现,然后换成自己 的 Pool 类名就可以了
  • database 驱动的数据库对象 是读 & 写连接配置的
  • minActive 连接池需要维持的连接数
  • maxActive 连接池最大保持的连接数
  • maxWait 连接池最多等待连接数, 如果没有限制为0(默认)
  • maxWaitTime 连接最大等待时间,单位秒,如果没有限制为0(默认)
  • maxIdleTime 连接最大空闲时间,单位秒

连接池数量根据数据库配置的承受能力设置,并且连接池数量多不代表越快;连接池的数量会跟 Worker 进程挂钩,每个 Worker 进程会创建属于当前进程的连接池。所以如果设置 minActive 和 maxActive 需要注意,这里的数量会是乘以 Worker 进程数量。

如果 minActive 是 5 ,swoole的 worker_num 配置是 2 ,那么这个 minActive 至少会创建 10 个连接,所以一定要注意这里。

Swoft的连接池只有在进行数据库操作的时候才会去创建连接,并不是框架启动的时候创建连接。

来源:https://8code.net/index/index/article/id/54

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要

PHP进阶架构师>>>视频、面试文档免费获取​shimo.im
17f365ae36bad9009d6e5b449ecf5d86.png

或 者关注咱们下面的知乎专栏

PHP架构师圈子​zhuanlan.zhihu.com
3906c277b81203f482f332dc7168d3dd.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值