Schnelleinführung in die Datenbank (basierend auf dem Laravel-Datenbankkomponenten)
webman/database ist auf der Basis von illuminate/database entwickelt und bietet eine Verbindungspoolfunktion, die sowohl in korutinen als auch in nicht-korutinen Umgebungen unterstützt wird. Die Nutzung erfolgt auf die gleiche Weise wie bei Laravel.
Entwickler können auch das Kapitel Verwendung anderer Datenbankkomponenten konsultieren, um ThinkPHP oder andere Datenbanken zu verwenden.
Hinweis
Dieses Handbuch gilt für die Version webman-v2. Falls Sie die Version webman-v1 verwenden, schauen Sie bitte in das v1 Handbuch.
Datenbankinstallation
composer require -W webman/database illuminate/pagination illuminate/events symfony/var-dumper
Nach der Installation ist ein Neustart erforderlich (reload hat keine Wirkung).
Hinweis
webman/database ist von Laravel'silluminate/database
abhängig, daher werden beim Installieren automatisch die Abhängigkeiten vonilluminate/database
installiert.Hinweis
Wenn Sie keine Paginierung, Datenbankereignisse oder SQL-Protokollierung benötigen, führen Sie einfach
composer require -W webman/database
aus.
Datenbankkonfiguration
config/database.php
return [
// Standarddatenbank
'default' => 'mysql',
// Verschiedene Datenbankkonfigurationen
'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, // Dies ist notwendig, wenn swoole oder swow als Treiber verwendet wird
],
'pool' => [ // Verbindungspoolkonfiguration
'max_connections' => 5, // Maximalverbindungen
'min_connections' => 1, // Minimalverbindungen
'wait_timeout' => 3, // Maximale Wartezeit beim Abrufen einer Verbindung aus dem Pool. Bei Überschreitung wird eine Ausnahme ausgelöst. Gilt nur in Korutinenumgebungen
'idle_timeout' => 60, // Maximale Leerlaufzeit für Verbindungen im Verbindungspool. Nach Überschreitung wird die Verbindung geschlossen und zurückgewonnen, bis die Anzahl der Verbindungen `min_connections` erreicht
'heartbeat_interval' => 50, // Zeitintervall für die Herzschlagprüfung des Verbindungspools, in Sekunden, empfohlen weniger als 60 Sekunden
],
],
],
];
Abgesehen von der pool
-Konfiguration sind die anderen Konfigurationen identisch mit Laravel.
Über den Verbindungspool
- Jeder Prozess hat seinen eigenen Verbindungspool, der zwischen Prozessen nicht geteilt wird.
- Bei deaktivierten Korutinen wird die Verarbeitung im Prozess nacheinander ausgeführt, es entsteht keine Parallelität, sodass der Verbindungspool maximal nur eine Verbindung hat.
- Bei aktivierten Korutinen wird die Verarbeitung im Prozess parallel durchgeführt, und die Anzahl der Verbindungen im Pool wird je nach Bedarf dynamisch angepasst, wobei sie maximal
max_connections
und minimalmin_connections
nicht unterschreiten kann. - Da die maximale Anzahl der Verbindungen im Pool
max_connections
beträgt, wird bei einer Anzahl von Korutinen, die die Datenbank betreiben, die größer ist alsmax_connections
, eine oder mehrere Korutinen in der Warteschlange bleiben, maximalwait_timeout
Sekunden warten und bei Überschreitung eine Ausnahme auslösen. - Im Leerlauf (einschließlich Korutinen- und Nicht-Korutinenumgebungen) werden Verbindungen nach
idle_timeout
Zeit zurückgewonnen, bis die Anzahl der Verbindungenmin_connections
erreicht (min_connections
kann 0 sein).
Beispiel für die Nutzung der Datenbank
<?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");
}
}
Wir sehen, dass die Nutzung identisch mit Laravel ist, wobei die Methode Db::table()
verwendet wird, um mit der Datenbank zu interagieren.