2008-09-02 14 views
60

¿Es posible almacenar en caché las conexiones de la base de datos cuando se utiliza PHP como lo haría en un contenedor J2EE? ¿Si es así, cómo?agrupación de conexiones en PHP

+0

¿Qué tal esto? https://github.com/junamai2000/mod_namy_pool – nam

+0

¿Ha mirado conexiones persistentes usando [mysql_pconnect()] (http://www.php.net/mysql_pconnect)? –

Respuesta

0

No se pueden crear instancias de grupos de conexiones manualmente.

Pero puede utilizar la agrupación de conexiones "integradas" con la función mysql_pconnect.

8

Supongo que estás usando mod_php, ¿verdad?

Cuando un archivo PHP termina de ejecutar todo su estado se cancela, por lo que no hay forma (en código PHP) para hacer la agrupación de conexiones. En cambio, debes confiar en las extensiones.

Puede mysql_pconnect para que sus conexiones no se cierren después de que la página finalice, de esa manera se vuelven a utilizar en la próxima solicitud.

Esto podría ser todo lo que necesita, pero esto no es lo mismo que la agrupación de conexiones, ya que no hay forma de especificar el número de conexiones para mantener abierto.

Saludos.

+3

¿Pueden reutilizar la conexión diferentes usuarios? En caso afirmativo, ¿por qué el manual dice que debemos configurar MySQL para evitar demasiadas conexiones? – omg

43

No hay conexión agrupando en php.
mysql_pconnect y agrupación de conexiones son dos cosas diferentes. Hay muchos problemas relacionados con mysql_pconnect y primero debe leer el manual y usarlo con cuidado, pero esto no es una agrupación de conexiones.

La agrupación de conexiones es una técnica en la que el servidor de aplicaciones gestiona las conexiones. Cuando la aplicación necesita una conexión, la solicita al servidor de aplicaciones y el servidor de aplicaciones devuelve una de las conexiones agrupadas si hay una libre.

Podemos hacer escala conexión en php para que vaya a través de siguiente enlace: http://www.oracle.com/technetwork/articles/dsl/white-php-part1-355135.html

Así que no la agrupación de conexiones en php.

Como dijo Julio, apache libera todos los recursos cuando la solicitud finaliza para la solicitud actual. Puedes usar mysql_pconnect pero estás limitado con esa función y debes ser muy cuidadoso. Otra opción es usar un patrón singleton, pero nada de esto es un agrupamiento.

Este es un buen artículo: http://blogs.oracle.com/opal/2007/01/highly_scalable_connection_poo.html

también leyeron uno http://www.apache2.es/2.2.2/mod/mod_dbd.html

+7

¿Sin agrupación de conexiones? Guau. – Justin

+0

"La conexión con el servidor SQL no se cerrará cuando finalice la ejecución del script". - http://www.php.net/manual/en/function.mysql-pconnect.php – RandomSeed

+2

Enlace de trabajo para el blog de Oracle: https://blogs.oracle.com/opal/entry/highly_scalable_connection_poo –

10

Las conexiones persistentes son nada como la agrupación de conexiones. Una conexión persistente en php solo se reutilizará si realiza múltiples conexiones de base de datos dentro del mismo contexto de solicitud/secuencia de comandos. En la mayoría de escenarios típicos de desarrollo web, maximizará sus conexiones mucho más rápido si usa mysql_pconnect porque su script no tendrá forma de obtener una referencia a las conexiones abiertas en su próxima solicitud. La mejor forma de utilizar conexiones de base de datos en php es crear una instancia única de un objeto db para que la conexión se reutilice en el contexto de la ejecución del script. Esto todavía incurre en al menos 1 conexión de db por solicitud, pero es mejor que hacer múltiples conexiones de base de datos por solicitud.

No existe una verdadera agrupación de conexiones db en php debido a la naturaleza de php.Php no es un servidor de aplicaciones que se puede sentar entre las solicitudes y administrar las referencias a un grupo de conexiones abiertas, al menos no sin algún tipo de hack importante. Creo que, en teoría, podrías escribir un servidor de aplicaciones en php y ejecutarlo como un script de línea de comandos que se quedara ahí en segundo plano y mantuvieras abiertas muchas conexiones de db y pasaras referencias a ellas a tus otros scripts, pero yo no saber si eso sería posible en la práctica, cómo pasaría las referencias de su script de línea de comandos a otras secuencias de comandos, y dudo que funcionaría bien, incluso si pudiera llevarlo a cabo. De todos modos, eso es principalmente especulación. Solo noté el enlace que alguien más publicó en un módulo de apache para permitir la agrupación de conexiones para servidores prefork como php. Parece interesante: https://github.com/junamai2000/mod_namy_pool#readme

+3

"La conexión a el servidor SQL no se cerrará cuando finalice la ejecución del script ". - http://www.php.net/manual/en/function.mysql-pconnect.php – RandomSeed

+2

esto es incorrecto en PHP-FPM y Apache/mod_php. –

+0

"La mejor manera de usar conexiones de db en php es crear una instancia de singleton de un objeto db para que la conexión se reutilice en el contexto de la ejecución de su script". - Este es el ganso dorado que estoy buscando. ¡Excelente manera de explicar exactamente dónde y por qué el singleton sería útil! – samazi

Cuestiones relacionadas