Beim Erstellen von stark gleichzeitigen Webanwendungen ist der Overhead von Datenbankverbindungen ein Leistungs Engpass, der nicht ignoriert werden kann. Die Wiederherstellung einer Datenbankverbindung mit jeder Anfrage verschwendet nicht nur Ressourcen, sondern kann auch zu häufigem Verbindungsunterbrechungen führen. Um dieses Problem zu lösen, stellt PHP einen Mechanismus zur Verfügung, um Datenbankverbindungen zu bestehen, wobei die Funktion Connect () in bestimmten Erweiterungen (z. B. MySQL, PostgreSQL) auf persistierende Weise verwendet werden kann, wodurch die Systemleistung und -stabilität effektiv verbessert werden.
Die anhaltende Verbindung bedeutet, dass nach Abschluss der Anforderung das PHP -Skript die Verbindung mit der Datenbank nicht schließt, sondern die Verbindung im Verbindungspool zur Wiederverwendung nachfolgender Anforderungen behält. Dies vermeidet häufig "Connect-Disconnect-Reconnect" -Prozesse "Connect-Disconnect-Reconnect" und reduziert die Serverlast.
Wenn Sie MySQL als Beispiel einnehmen, können sowohl MySQLI- als auch PDO -Erweiterungen von PHP so konfiguriert werden, dass sie anhaltende Verbindungen verwenden. Hier ist ein Beispiel mit MySQLI :
<?php
$host = 'p:localhost'; // Beachten Sie das Präfix 'p:' Zeigt eine anhaltende Verbindung an
$user = 'db_user';
$password = 'db_pass';
$database = 'example_db';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die("Verbindung ist fehlgeschlagen: " . $conn->connect_error);
}
echo "Persistenzverbindung erfolgreich!";
?>
Im obigen Code wird MySQLI durch Hinzufügen des Präfixes P: Präfix versuchen, eine anhaltende Verbindung herzustellen. Wenn im Verbindungspool bereits eine verfügbare Verbindung vorhanden ist, verwenden Sie sie wieder. Andernfalls wird eine neue Verbindung erstellt.
PDO bietet eine elegantere Möglichkeit, anhaltende Verbindungen mit nur einer Option aufzubauen:
<?php
$dsn = 'mysql:host=localhost;dbname=example_db';
$user = 'db_user';
$password = 'db_pass';
$options = [
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
];
try {
$pdo = new PDO($dsn, $user, $password, $options);
echo "PDO Persistenzverbindung erfolgreich!";
} catch (PDOException $e) {
echo "Verbindung ist fehlgeschlagen: " . $e->getMessage();
}
?>
Durch die Verwendung von PDO :: attr_persistent können Sie leicht anhaltende Verbindungen ermöglichen, ohne die Host -Adresse zu ändern.
Leistungsverbesserung : Vermeiden Sie die CPU und den Speicheraufwand, der durch häufige Verbindungserstellung verursacht wird.
Schnellere Antwort : Die Verbindung besteht bereits und der Datenbankvorgang kann fast sofort durchgeführt werden.
Ressourcenwiederverwendung : Mehrere Anfragen können die Verbindungsressourcen freigeben und den Druck auf den Datenbankserver verringern.
Obwohl anhaltende Verbindungen viele Vorteile haben, müssen auch einige potenzielle Probleme beachtet werden:
Verbindungsleckrisiko : Wenn die Codelogik Transaktionen nicht korrekt behandelt oder Anweisungen korrekt schließt, können die Ressourcen in der Verbindung zurückgelegt werden.
Kontamination des Verbindungsstatus : Die Verbindung wird zwischen mehreren Anforderungen wiederverwendet. Es ist erforderlich, um sicherzustellen, dass der Verbindungsstatus vor Beginn jeder Anfrage gereinigt wird.
Obere Anzahl von Verbindungen : Persistente Verbindungen sind nicht einfach zu entlassen und können die maximale Anzahl von Verbindungen zur Datenbank ausmachen. Es wird empfohlen, sie auf Datenbankebene angemessen zu konfigurieren.
Angenommen, die Remote -Datenbankadresse, mit der Sie eine Verbindung herstellen möchten, ist db.m66.net und Sie möchten PDO verwenden, um anhaltende Verbindungen zu erzielen: