這要看你給 Eloquent 的 Driver。
從 PHP 的角度來講,有四種方法可以實現 Database Connection Pooling
- MSSQL pconnect(在 PHP 7.0 被移除,應該用 PDO 取代)
- PDO 的 ATTR_PERSISTENT
<?php
$dbh = new PDO(PDO_DSN, USERNAME, PASSWORD, [
PDO::ATTR_PERSISTENT => true,
]);
這種方法可以用 PDO 建立長連線(不間斷連線)
在 Laravel 中可以這樣設定
// config/database.php
return [
'connections' => [
'mysql' => [
'driver' => 'mysql',
// ...
'prefix' => '',
'options' => [
PDO::ATTR_PERSISTENT => true,
],
],
],
];
不過官方也有說明,如果 driver 支援長連接(例如 ODBC)就用 ODBC 原生的方法做,因為這樣不僅能讓單一應用程式使用 Connection Pooling,也能以 Process 的方式共享 Connection Pooling
- ODBC Connection Pooling
前提是 ODBC 的 driver 跟 library 有支援,然後直接把 driver 改成 ODBC,然後用 PDO_ODBC 去連接資料庫,記得在 php.ini
中設定 pdo_odbc.connection_pooling=strict/relaxed/off
- freeTDS
這是在網路上看到的做法,它是利用 linux process 去管理 connection,不確定現在還能不能用
結論
最簡單的做法是直接在 config/database.php
中加入一個 options,不過如果同一台伺服器上有超多個 connection 需求(建置有多個服務的話)那記憶體或磁碟 IO 使用量會很可觀。
比較複雜但完善的解決方法是使用支援 Connection Pooling 的 ODBC Driver,好處是不僅只限連接 MySQL,也可以無痛擴充連接 MSSQl 或 Oracle SQL(除了 SQL 語法之外的無痛),壞處是建置成本比較高(需要花點時間摸索跟研究)
這要看你給 Eloquent 的 Driver。
從 PHP 的角度來講,有四種方法可以實現 Database Connection Pooling
- MSSQL pconnect(在 PHP 7.0 被移除,應該用 PDO 取代)
- PDO 的 ATTR_PERSISTENT
<?php
$dbh = new PDO(PDO_DSN, USERNAME, PASSWORD, [
PDO::ATTR_PERSISTENT => true,
]);
這種方法可以用 PDO 建立長連線(不間斷連線)
在 Laravel 中可以這樣設定
// config/database.php
return [
'connections' => [
'mysql' => [
'driver' => 'mysql',
// ...
'prefix' => '',
'options' => [
PDO::ATTR_PERSISTENT => true,
],
],
],
];
不過官方也有說明,如果 driver 支援長連接(例如 ODBC)就用 ODBC 原生的方法做,因為這樣不僅能讓單一應用程式使用 Connection Pooling,也能以 Process 的方式共享 Connection Pooling
- ODBC Connection Pooling
前提是 ODBC 的 driver 跟 library 有支援,然後直接把 driver 改成 ODBC,然後用 PDO_ODBC 去連接資料庫,記得在 php.ini
中設定 pdo_odbc.connection_pooling=strict/relaxed/off
- freeTDS
這是在網路上看到的做法,它是利用 linux process 去管理 connection,不確定現在還能不能用
結論
最簡單的做法是直接在 config/database.php
中加入一個 options,不過如果同一台伺服器上有超多個 connection 需求(建置有多個服務的話)那記憶體或磁碟 IO 使用量會很可觀。
比較複雜但完善的解決方法是使用支援 Connection Pooling 的 ODBC Driver,好處是不僅只限連接 MySQL,也可以無痛擴充連接 MSSQl 或 Oracle SQL(除了 SQL 語法之外的無痛),壞處是建置成本比較高(需要花點時間摸索跟研究)
這要看你給 Eloquent 的 Driver。
從 PHP 的角度來講,有四種方法可以實現 Database Connection Pooling
這種方法可以用 PDO 建立長連線(不間斷連線)
在 Laravel 中可以這樣設定
不過官方也有說明,如果 driver 支援長連接(例如 ODBC)就用 ODBC 原生的方法做,因為這樣不僅能讓單一應用程式使用 Connection Pooling,也能以 Process 的方式共享 Connection Pooling
前提是 ODBC 的 driver 跟 library 有支援,然後直接把 driver 改成 ODBC,然後用 PDO_ODBC 去連接資料庫,記得在
php.ini
中設定pdo_odbc.connection_pooling=strict/relaxed/off
這是在網路上看到的做法,它是利用 linux process 去管理 connection,不確定現在還能不能用
結論
最簡單的做法是直接在
config/database.php
中加入一個 options,不過如果同一台伺服器上有超多個 connection 需求(建置有多個服務的話)那記憶體或磁碟 IO 使用量會很可觀。比較複雜但完善的解決方法是使用支援 Connection Pooling 的 ODBC Driver,好處是不僅只限連接 MySQL,也可以無痛擴充連接 MSSQl 或 Oracle SQL(除了 SQL 語法之外的無痛),壞處是建置成本比較高(需要花點時間摸索跟研究)