Lors de la création d'applications Web très concurrentes, les frais généraux des connexions de base de données sont un goulot d'étranglement des performances qui ne peut pas être ignoré. La rétablissement d'une connexion de base de données avec chaque demande gaspille non seulement des ressources, mais peut également provoquer des interruptions de connexions fréquentes. Pour résoudre ce problème, PHP fournit un mécanisme pour persister des connexions de base de données, où la fonction connect () peut être utilisée de manière persistante dans certaines extensions (comme MySQL, PostgreSQL), améliorant ainsi efficacement les performances et la stabilité du système.
La connexion persistante signifie qu'à la fin de la demande, le script PHP ne ferme pas la connexion avec la base de données, mais conserve la connexion dans le pool de connexion pour réutiliser les demandes suivantes. Cela évite les processus fréquents "connect-disonnect-reconnect" et réduit la charge du serveur.
Prenant un exemple MySQL, les extensions MySQLI et PDO de PHP peuvent être configurées pour utiliser des connexions persistantes. Voici un exemple utilisant MySQLI :
<?php
$host = 'p:localhost'; // Notez le préfixe 'p:' Indique une connexion persistante
$user = 'db_user';
$password = 'db_pass';
$database = 'example_db';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
die("Échec de la connexion: " . $conn->connect_error);
}
echo "Connexion de persistance avec succès!";
?>
Dans le code ci-dessus, en ajoutant le préfixe P: au nom d'hôte, MySQLI essaiera d'établir une connexion persistante. S'il existe déjà une connexion disponible dans le pool de connexions, réutilisez-la; Sinon, une nouvelle connexion sera créée.
L'OPD fournit un moyen plus élégant de mettre en place des connexions persistantes, avec une seule option:
<?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 Connexion de persistance avec succès!";
} catch (PDOException $e) {
echo "Échec de la connexion: " . $e->getMessage();
}
?>
L'utilisation de PDO :: att_persistent peut facilement permettre des connexions persistantes sans modifier l'adresse hôte.
Amélioration des performances : évitez le CPU et les frais généraux de mémoire causés par la création de connexions fréquente.
Réponse plus rapide : la connexion existe déjà et le fonctionnement de la base de données peut être effectué presque immédiatement.
Réutilisation des ressources : plusieurs demandes peuvent partager les ressources de connexion, en réduisant la pression sur le serveur de base de données.
Bien que les connexions persistantes présentent de nombreux avantages, il existe également des problèmes potentiels auxquels vous attendez:
Risque de fuite de connexion : Si la logique du code ne gère pas correctement les transactions ou ne fermer les instructions, les ressources peuvent être en rétropulgation dans la connexion.
Contamination de l'état de connexion : la connexion est réutilisée entre plusieurs demandes et il est nécessaire de s'assurer que l'état de connexion est nettoyé avant le début de chaque demande.
Nombre supérieur de connexions : les connexions persistantes ne sont pas faciles à libérer et peuvent expliquer le nombre maximum de connexions à la base de données. Il est recommandé de les configurer raisonnablement au niveau de la base de données.
Supposons que l'adresse de la base de données distante à laquelle vous souhaitez connecter est db.m66.net et que vous souhaitez utiliser l'APD pour obtenir des connexions persistantes: