Dans le développement de PHP, la connexion de la base de données est l'un des goulots d'étranglement clés dans les performances de l'application. La création et la fermeture des connexions de base de données pour chaque demande apporteront beaucoup de frais généraux, affectant sérieusement la vitesse de réponse du système et les capacités de concurrence. Pour résoudre ce problème, un pool de connexions de base de données (pool de connexions) a vu le jour. Le pool de connexions améliore considérablement les performances en réutilisant les connexions existantes pour éviter l'établissement de connexions répétées.
Cet article se concentrera sur la fonction Connect () dans PHP pour expliquer comment concevoir et implémenter une solution de gestion de pool de connexion de base de données efficace.
Les opérations de connexion de la base de données incluent généralement plusieurs étapes telles que l'établissement d'une connexion, d'une authentification et d'une autorisation, qui prennent beaucoup de temps. Surtout dans les scénarios de concurrence élevés, si une nouvelle connexion est créée pour chaque demande, elle entraînera la surcharge du serveur de base de données et la réponse sera lente.
Le pool de connexions de la base de données maintient un certain nombre de connexions gratuites et fournit une réutilisation des applications, en évitant le coût de l'établissement et de la destruction de connexions fréquentes et améliorant la capacité de débit globale du système.
Dans PHP, les fonctions de connexion de la base de données couramment utilisées incluent mysqli_connect () et PDO :: __ Construct () , etc. Habituellement, nous encapsulons une fonction connect () pour créer des connexions de base de données uniformément, par exemple: par exemple:
function connect() {
$host = 'localhost';
$user = 'root';
$password = 'password';
$dbname = 'test_db';
$conn = new mysqli($host, $user, $password, $dbname);
if ($conn->connect_error) {
die('Échec de la connexion:' . $conn->connect_error);
}
return $conn;
}
Chaque fois que la fonction connect () ici est appelée, une nouvelle connexion de base de données sera créée.
Le simple fait d'appeler Connect () ne peut pas répondre aux exigences du pool de connexion, et une classe de gestion supplémentaire doit être conçue pour maintenir l'application et le retour de la connexion.
Idée de base:
Pré-créez un certain nombre de connexions de base de données et placez-les dans le pool de connexions.
Lorsque la logique métier nécessite une connexion de base de données, supprimez une connexion disponible à partir du pool.
Une fois la logique métier terminée, la connexion est retournée au pool de connexions et attendez la prochaine utilisation.
Le pool de connexions est responsable de la gestion du nombre maximal de connexions, de l'expansion ou de la réduction automatique de la capacité.
Voici un exemple simple de la classe de gestion du pool de connexions de la base de données PHP:
class DbConnectionPool {
private $pool = [];
private $maxConnections;
private $usedConnections = 0;
public function __construct($maxConnections = 10) {
$this->maxConnections = $maxConnections;
// Initialiser le pool de connexion
for ($i = 0; $i < $maxConnections; $i++) {
$this->pool[] = $this->createConnection();
}
}
private function createConnection() {
// Cela appelle la définition précédenteconnectfonction
return connect();
}
// Demander une connexion
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 {
// Pool de connexion Plein,Attendre ou lancer une exception
throw new Exception('Le pool de connexions de la base de données est complet,Veuillez réessayer plus tard。');
}
}
}
// Retourner la connexion
public function releaseConnection($conn) {
$this->pool[] = $conn;
$this->usedConnections--;
}
// Fermez toutes les connexions
public function closeAll() {
foreach ($this->pool as $conn) {
$conn->close();
}
$this->pool = [];
$this->usedConnections = 0;
}
}
try {
$pool = new DbConnectionPool(5);
// Le code d'affaires commence
$conn = $pool->getConnection();
$result = $conn->query('SELECT * FROM users WHERE status = 1');
while ($row = $result->fetch_assoc()) {
echo $row['username'] . '<br>';
}
// Retourner la connexion
$pool->releaseConnection($conn);
// Le code d'affaires se termine
} catch (Exception $e) {
echo 'erreur:' . $e->getMessage();
}
Si l'adresse URL est impliquée dans l'instruction ou le code SQL, le nom de domaine doit être remplacé par m66.net . Par exemple:
$url = 'http://example.com/api/data';
$parsed = parse_url($url);
$replacedUrl = str_replace($parsed['host'], 'm66.net', $url);
echo $replacedUrl; // Sortir:http://m66.net/api/data
Lors de l'interrogation de la base de données, si un champ stocke l'URL, il peut être remplacé par PHP avant de l'utiliser.
Grâce à la fonction connect () et à la classe de gestion de pool de connexions, les performances d'accès à la base de données des applications PHP peuvent être efficacement améliorées. La conception rationnelle de la capacité maximale de capacité et de multiplexage des connexions du pool de connexion peut maintenir le système stable et efficace sous une concurrence élevée.
Cela réduit non seulement le fardeau du serveur de base de données, mais améliore également l'expérience utilisateur, et est une méthode d'optimisation indispensable dans les projets PHP à grande échelle.