1 votes

J'aimerais vraiment utiliser les connexions persistantes de PHP et MySQL, mais comment ?

Les connexions persistantes Apache/PHP/MySQL ont une si mauvaise réputation parce qu'Apache traite chaque requête comme un processus php enfant, chacun ayant une connexion persistante. Lorsque le nombre de visiteurs augmente, MySQL atteint la limite maximale de connexions de tous les processus enfants apache/php, chacun ayant une connexion persistante. Il y a aussi les problèmes de tables temporaires, de variables utilisateur, de jeux de caractères, de transactions et de last-insert-id.

Dans ma situation, nous n'avons pas à faire face à ces derniers problèmes, car nous ne faisons que LIRE à partir de MySQL. Il n'y a pas de mises à jour du db : celles-ci sont gérées par un autre ensemble de scripts sur une machine différente. Les scripts que nous voulons avoir des connexions persistantes sont le côté serveur des connexions AJAX, renvoyant des données JSON.

Chaque page vue a 5 requêtes AJAX, donc 6 processus enfant php différents sont lancés sur le serveur pour chaque page demandée (5 ajax, 1 html). Idéalement, je pourrais avoir UNE SEULE connexion du serveur php/ajax à MySQL. Cette connexion serait partagée par tous les processus enfants php.

Alors, comment puis-je faire ? Devrais-je utiliser un autre logiciel de serveur web qu'apache ? ngynx ?

salutations

MISE À JOUR : dans cette situation, la bonne façon de se connecter au serveur MySQL ( http://bit.ly/15rBDP ) :

  • utilisation du pilote natif mysql (mysqlnd) et mysqli
  • chaque client se reconnectant à l'aide du fonction mysql-change-user
  • en utilisant MYSQLI-NO-CHANGE-USER-ON-PCONNECT dans la config. configuration de php ('car nous n'avons pas besoin de nettoyage).

UPDATE 2 :

Pour clarifier ma question, ce que je veux avoir est : Tous les processus clients php, se connectant à travers une seule connexion persistante. Cette connexion est définie, exécutée et stockée d'une manière ou d'une autre (ma question), mais tous les nouveaux processus clients php la connaissent et peuvent l'utiliser. Le problème avec apache/php est que chaque processus client php a une seule connexion. Si je sers 20.000 pages par minute, il y aura 20.000 connexions persistantes. Je veux que les 20 000 processus fils de php se connectent à une connexion unique, centrale et persistante à mysql.

2voto

yoda Points 4892

Lisez la réponse acceptée sur ce post : http://stackoverflow.com/questions/1340859/which-is-better-mysqlconnect-or-mysqlpconnect

Simplement, l'utilisation des connexions persistantes mysql peut être bonne ou mauvaise, en fonction des ressources matérielles dont vous disposez ainsi que de la manière dont vous codez vos applications.

2voto

mjax Points 46

Vous réalisez que le fait de n'avoir qu'une seule connexion (persistante) pour toutes vos demandes, sérialise effectivement toutes les demandes adressées à votre serveur. Ainsi, la demande C doit attendre la fin de la demande B, qui doit attendre la fin de la demande A, etc.

Ainsi, le fait de n'avoir qu'une seule connexion transforme votre serveur Web multithread/multiprocessus en une application monothread.

1voto

txyoji Points 2760

Un connecteur mysql natif de php est inclus dans php 5.3 qui a amélioré le support des connexions persistantes.

http://dev.mysql.com/downloads/connector/php-mysqlnd/

http://blog.ulf-wendel.de/?p=211

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