數據庫快速入門(基于Laravel數據庫組件)
webman/database是基于illuminate/database開發(fā)的,并加入了連接池功能,支持協(xié)程和非協(xié)程環(huán)境,用法與laravel相同。
開發(fā)者也可以參考使用其它數據庫組件章節(jié)使用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,則只需要執(zhí)行
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, // 從連接池獲取連接等待的最大時間,超時后會拋出異常。僅在協(xié)程環(huán)境有效
'idle_timeout' => 60, // 連接池中連接最大空閑時間,超時后會關閉回收,直到連接數為min_connections
'heartbeat_interval' => 50, // 連接池心跳檢測時間,單位秒,建議小于60秒
],
],
],
];
除了pool
配置外,其它配置與laravel相同。
關于連接池
- 每個進程有自己的連接池,進程間不共享連接池。
- 不開啟協(xié)程時,業(yè)務在進程內排隊執(zhí)行,不會產生并發(fā),所以連接池最多只有1個連接。
- 開啟協(xié)程后,業(yè)務在進程內并發(fā)執(zhí)行,連接池會根據需要動態(tài)調整連接數,最多不超過
max_connections
,最少不小于min_connections
。 - 因為連接池連接數最大為
max_connections
,當操作數據庫的協(xié)程數大于max_connections
時,會有協(xié)程排隊等待,最多等待wait_timeout
秒,超過則觸發(fā)異常。 - 在空閑的情況下(包括協(xié)程和非協(xié)程環(huán)境),連接會在
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()
方法來操作數據庫。