81 votes

Mise en commun des connexions en PHP

Est-il possible de mettre en cache les connexions de base de données en utilisant PHP comme dans un conteneur J2EE? Si c'est le cas, comment?

57voto

darpet Points 1198

Il n'y a pas de regroupement de connexion en php.
mysql_pconnect de connexion et de mise en commun sont deux choses différentes. Il y a beaucoup de problèmes liés à l'mysql_pconnect et d'abord, vous devez lire le manuel d'utilisation attentivement et de l'utiliser, mais ce n'est pas le regroupement de connexion.

Le regroupement de connexions est une technique que l'application serveur gère les connexions. Ensuite, l'application nécessite une connexion entre le serveur d'application et le serveur renvoie une référence.

Donc pas de regroupement de connexion en php.

Comme Julio dit apache libère toutes les ressources lorsque la demande se termine pour la présente demande. Vous pouvez utiliser mysql_pconnect mais vous êtes limité à cette fonction et vous devez être très prudent. Les autres choix est d'utiliser le pattern singleton, mais rien de tout cela est de la mutualisation.

C'est un bon article: http://blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html

Aussi lire celui-ci http://www.apache2.es/2.2.2/mod/mod_dbd.html

17voto

minorgod Points 107

Les connexions persistantes ne sont rien comme le regroupement de connexion. Une connexion persistante en php ne seront réutilisés si vous effectuez plusieurs db se connecte au sein de la même demande/script contexte d'exécution. Dans la plupart des sur le web dev scénarios, vous aurez au maximum de vos connexions de façon plus rapide si vous utilisez mysql_pconnect parce que votre script n'auront aucun moyen d'obtenir une référence pour toutes les connexions ouvertes sur votre prochaine demande. La meilleure façon d'utiliser db connexions en php est de faire une instance du singleton de la bd à l'objet, de telle sorte que la connexion est réutilisé dans le cadre de l'exécution de votre script. Cette y aura toujours au moins 1 db connecter par demande, mais c'est mieux que de faire plusieurs db se connecte par reqeust.

Il n'y a pas de véritable db regroupement de connexion en php en raison de la nature de php. Php n'est pas un serveur d'application qui peut s'asseoir là entre les demandes et gérer les références à un pool de connexions ouvertes, du moins pas sans une sorte de grands hack. Je pense qu'en théorie, vous pourriez écrire une application serveur en php et exécuter un script en ligne de commande qui serait tout simplement s'asseoir là, dans l'arrière-plan et de garder un tas de db connexions ouvertes et de passer des références à d'autres scripts, mais je ne sais pas si ce serait possible dans la pratique, comment vous pouvez transmettre les références de votre commande en ligne de script à d'autres scripts, et je doute qu'il serait bien fonctionner, même si vous pourriez en tirer. De toute façon c'est surtout la spéculation. Je faisais juste remarquer le lien de quelqu'un d'autre, envoyé à un module apache pour permettre le regroupement de connexion pour prefork serveurs tels que le php. Semble intéressant: https://github.com/junamai2000/mod_namy_pool#readme

10voto

Julio César Points 3007

Je suppose que vous êtes à l'aide de mod_php, droit?

Quand un fichier PHP issue de l'exécution de tous c'est l'état est tué, donc il n'y a aucun moyen (dans le code PHP) pour faire le regroupement de connexion. Au lieu de cela, vous devez compter sur les extensions.

Vous pouvez mysql_pconnect de sorte que vos connexions de ne pas obtenir de fermé après la page de finitions, de cette façon, ils obtiennent réutilisés dans la prochaine demande.

Ceci peut être tout ce que vous avez besoin, mais ce n'est pas le même que le regroupement de connexion, car il n'y a aucun moyen de spécifier le nombre de connexions à maintenir ouvert.

Des acclamations.

9voto

user193130 Points 873

Vous pouvez utiliser MySQLi .

Pour plus d'informations, faites défiler jusqu'à la section Pooling de connexion @ http://www.php.net/manual/en/mysqli.quickstart.connections.php#example-1622

Notez que le regroupement de connexions dépend également de votre serveur (Apache httpd) et de sa configuration.

0voto

Marcel Points 882

Vous ne pouvez pas instancier manuellement les pools de connexions.

Mais vous pouvez utiliser le regroupement de connexions "intégré" avec la fonction mysql_pconnect .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X