Start · Sprachen · PHP · Referenz · mysql_xdevapi\Client

mysql_xdevapi\Client

Klasse

Ermöglicht den Zugriff auf den Verbindungspool für MySQL X DevAPI-Verbindungen.

seit PHP 8.0.0 Kategorie: db

Signatur

class mysql_xdevapi\Client

Beschreibung

Die Klasse mysql_xdevapi\Client stellt einen Verbindungspool für MySQL-Verbindungen über das X Protocol (X DevAPI) bereit. Sie wird typischerweise über die Funktion mysql_xdevapi\getClient() instanziiert und verwaltet einen Pool von wiederverwendbaren Datenbankverbindungen, was den Overhead durch das wiederholte Aufbauen neuer Verbindungen reduziert.

Mit einem Client-Objekt können Verbindungen aus dem Pool angefordert werden (getSession()), ohne jedes Mal eine neue physische Verbindung zur Datenbank herzustellen. Dies ist besonders in Hochlast-Szenarien und persistenten Anwendungen (z. B. mit einem PHP-Applikationsserver) vorteilhaft, da der Aufbau von TCP-Verbindungen und der Authentifizierungshandshake eingespart werden.

Die Client-Klasse unterstützt außerdem die Konfiguration von Pool-Parametern wie der maximalen Anzahl von Verbindungen, der maximalen Anzahl im Pool gehaltener Leerlaufverbindungen sowie dem Timeout für Leerlaufverbindungen. Diese Parameter werden beim Aufruf von getClient() als JSON-Konfigurationsobjekt übergeben.

Beim Aufruf von close() werden alle aktiven und gepoolten Verbindungen geschlossen und der Pool geleert. Dies sollte am Ende des Lebenszyklus des Clients aufgerufen werden, um Ressourcen freizugeben.

Beispiele

Verbindungspool erstellen und Session verwenden

<?php
// Verbindungspool mit maximaler Pool-Konfiguration erstellen
$uri = 'mysqlx://user:password@localhost:33060';
$poolConfig = json_encode([
    'pooling' => [
        'enabled'         => true,
        'maxSize'         => 10,
        'maxIdleTime'     => 60000,
        'queueTimeout'    => 10000,
    ]
]);

/** @var mysql_xdevapi\Client $client */
$client = mysql_xdevapi\getClient($uri, $poolConfig);

// Session aus dem Pool anfordern
$session = $client->getSession();

// Datenbankoperationen durchführen
$schema = $session->getSchema('myDatabase');
$collection = $schema->getCollection('myCollection');
$result = $collection->find('age > 18')->execute();

foreach ($result->fetchAll() as $doc) {
    echo $doc['name'] . PHP_EOL;
}

// Session schließen (gibt Verbindung zurück in den Pool)
$session->close();

// Client und alle gepoolten Verbindungen schließen
$client->close();

Mehrere Sessions aus demselben Pool verwenden

<?php
$uri = 'mysqlx://user:password@localhost:33060';
$poolConfig = json_encode([
    'pooling' => [
        'enabled' => true,
        'maxSize' => 5,
    ]
]);

$client = mysql_xdevapi\getClient($uri, $poolConfig);

// Mehrere Sessions gleichzeitig aus dem Pool nutzen
$sessions = [];
for ($i = 0; $i < 3; $i++) {
    $sessions[$i] = $client->getSession();
}

// Operationen auf verschiedenen Sessions ausführen
foreach ($sessions as $index => $session) {
    $res = $session->sql('SELECT DATABASE()')->execute();
    echo 'Session ' . $index . ': ' . ($res->fetchOne()[0] ?? 'keine DB') . PHP_EOL;
    $session->close(); // Verbindung zurück in den Pool
}

$client->close();
Session 0: keine DB Session 1: keine DB Session 2: keine DB

// Wichtig · Fallstricke

Hinweis zur Erweiterung: Die Klasse mysql_xdevapi\Client gehört zur mysql_xdevapi-Erweiterung, die seit PHP 8.0 als PECL-Erweiterung verfügbar ist und separat installiert werden muss. Sie ist nicht Teil der Standardinstallation von PHP.

X Protocol: Das X DevAPI verwendet standardmäßig Port 33060 (nicht den klassischen MySQL-Port 3306). Stellen Sie sicher, dass der MySQL-Server mit aktiviertem X Plugin betrieben wird (mysqlx-Plugin).

Ressourcenmanagement: Es ist wichtig, $client->close() explizit aufzurufen, wenn der Client nicht mehr benötigt wird. Andernfalls können Datenbankverbindungen offen bleiben und Ressourcen auf dem MySQL-Server belegen.

Nicht zu verwechseln mit den älteren mysql_*- oder mysqli_*-Funktionen bzw. PDO — die X DevAPI-Erweiterung ist eine eigenständige API, die dokumentenorientierte und relationale Datenbankoperationen über das moderne X Protocol unterstützt.