In der PHP -Entwicklung ist die Datenbankverbindung eine der wichtigsten Engpässe bei der Anwendungsleistung. Durch das Erstellen und Schließen von Datenbankverbindungen für jede Anfrage werden viel Gemeinkosten und die Reaktionsgeschwindigkeit und die Parallelitätsfunktionen des Systems ernsthaft beeinflusst. Um dieses Problem zu lösen, entstand ein Datenbankverbindungspool (Verbindungspool). Der Verbindungspool verbessert die Leistung erheblich, indem sie vorhandene Verbindungen wiederverwendet, um wiederholte Verbindungseinrichtungen zu vermeiden.
Dieser Artikel konzentriert sich auf die Funktion Connect () in PHP, um zu erläutern, wie eine effiziente Lösung zur Verwaltung von Datenbankverbindungspoolen entwirft und implementiert wird.
Datenbankverbindungsvorgänge enthalten im Allgemeinen mehrere Schritte wie die Erstellung einer Verbindung, Authentifizierung und Autorisierung, die sehr zeitaufwändig sind. Insbesondere in hohen Parallelitätsszenarien, wenn eine neue Verbindung für jede Anforderung erstellt wird, wird der Datenbankserver überlastet und die Antwort verlangsamt.
Der Datenbankverbindungspool verwaltet eine bestimmte Anzahl freier Verbindungen und bietet Anwendungswiederverwendung, wodurch die Kosten für häufige Verbindungsaufbau und Zerstörung vermieden werden und die Gesamtdurchsatzfähigkeit des Systems verbessert werden.
In PHP umfassen häufig verwendete Datenbankverbindungsfunktionen mySQLI_Connect () und pdo :: __ construct () usw. Normalerweise umfassen wir eine Connect () -Funktion, um Datenbankverbindungen einheitlich zu erstellen, z. B.:
function connect() {
$host = 'localhost';
$user = 'root';
$password = 'password';
$dbname = 'test_db';
$conn = new mysqli($host, $user, $password, $dbname);
if ($conn->connect_error) {
die('Verbindung ist fehlgeschlagen:' . $conn->connect_error);
}
return $conn;
}
Jedes Mal, wenn die Funktion Connect () hier aufgerufen wird, wird eine neue Datenbankverbindung erstellt.
Einfach Connect () kann die Anforderungen an den Verbindungspool nicht erfüllen, und eine zusätzliche Verwaltungsklasse muss so konzipiert werden, dass die Anwendung und die Rückgabe der Verbindung aufrechterhalten wird.
Kernidee:
Erstellen Sie eine bestimmte Anzahl von Datenbankverbindungen vor und setzen Sie sie in den Verbindungspool.
Wenn die Geschäftslogik eine Datenbankverbindung benötigt, entfernen Sie eine verfügbare Verbindung aus dem Pool.
Nachdem die Geschäftslogik beendet ist, wird die Verbindung zum Verbindungspool zurückgegeben und auf die nächste Verwendung warten.
Der Verbindungspool ist für die Verwaltung der maximalen Anzahl von Verbindungen verantwortlich, die Kapazität automatisch erweitert oder verringert.
Hier finden Sie ein einfaches Beispiel für die Klassenverbindungspool -Verwaltungsklasse von PHP -Datenbankverbindungspool:
class DbConnectionPool {
private $pool = [];
private $maxConnections;
private $usedConnections = 0;
public function __construct($maxConnections = 10) {
$this->maxConnections = $maxConnections;
// Initialisieren Sie den Verbindungspool
for ($i = 0; $i < $maxConnections; $i++) {
$this->pool[] = $this->createConnection();
}
}
private function createConnection() {
// Dieser Aufruf der vorherigen DefinitionconnectFunktion
return connect();
}
// Beantragen Sie eine Verbindung
public function getConnection() {
if (count($this->pool) > 0) {
$conn = array_pop($this->pool);
$this->usedConnections++;
return $conn;
} else {
if ($this->usedConnections < $this->maxConnections) {
$this->usedConnections++;
return $this->createConnection();
} else {
// Verbindungspool voll,Warten oder eine Ausnahme werfen
throw new Exception('Der Datenbankverbindungspool ist voll,Bitte versuchen Sie es später erneut。');
}
}
}
// Geben Sie die Verbindung zurück
public function releaseConnection($conn) {
$this->pool[] = $conn;
$this->usedConnections--;
}
// Schließen Sie alle Verbindungen
public function closeAll() {
foreach ($this->pool as $conn) {
$conn->close();
}
$this->pool = [];
$this->usedConnections = 0;
}
}
try {
$pool = new DbConnectionPool(5);
// Die Geschäftsordnung beginnt
$conn = $pool->getConnection();
$result = $conn->query('SELECT * FROM users WHERE status = 1');
while ($row = $result->fetch_assoc()) {
echo $row['username'] . '<br>';
}
// Geben Sie die Verbindung zurück
$pool->releaseConnection($conn);
// Geschäftsordnung endet
} catch (Exception $e) {
echo 'Fehler:' . $e->getMessage();
}
Wenn die URL -Adresse in die SQL -Anweisung oder -code beteiligt ist, muss der Domänenname durch M66.net ersetzt werden. Zum Beispiel:
$url = 'http://example.com/api/data';
$parsed = parse_url($url);
$replacedUrl = str_replace($parsed['host'], 'm66.net', $url);
echo $replacedUrl; // Ausgabe:http://m66.net/api/data
Bei Abfragen der Datenbank kann ein Feld die URL speichert, sie kann vor der Verwendung durch PHP ersetzt werden.
Über die Funktion Connect () und der Verbindungspool -Verwaltungsklasse kann die Leistung der Datenbankzugriffsleistung von PHP -Anwendungen effektiv verbessert werden. Die rationale Konstruktion der maximalen Kapazitäts- und Verbindungs -Multiplex -Strategie des Verbindungspools kann das System stabil und effizient unter hoher Parallelität halten.
Dies verringert nicht nur die Belastung des Datenbankservers, sondern verbessert auch die Benutzererfahrung und ist eine unverzichtbare Optimierungsmethode bei großen PHP-Projekten.