Pool de conexiones en PHP

Rodrigo Fuentealba darkprox en gmail.com
Jue Feb 9 23:56:34 CLST 2006


JuanPa wrote:
> Gracias por sus respuestas listeros...
> La verdad si me estoy complicando con mis tres capas... bien cabe 
> decirlo que es la primera vez que lo pongo en practica en PHP de forma 
> practica. Bien dicen por ahi, que 100 horas de teoria no valen un 
> cacho sin una de práctica. Es por eso que me estaba complicando con 
> esto de las conexiones. Quisiera que me aclaren un poco mas el 
> concepto de conexion persistente y su utilidad practica.
A ver, las conexiones persistentes dejan un buffer abierto mientras se 
ejecutan las consultas, y son más rápidas pero consumen más recursos, 
pues dejan la conexión abierta mientras no se cierre la aplicación (con 
exit(); o matándolas). Es un atentado en contra de tu memoria, y por lo 
general, mucha gente las encuentra más fáciles, pero yo como que no las 
recomiendo.

Es mejor usar conexiones no persistentes, es decir, abriendo la conexión 
al principio de tu script y cerrando la conexión al final, pues siempre 
vas a tener páginas que no hagan ninguna consulta a la base de datos... 
¿Para qué, entonces, tendrás una conexión abierta? Es únicamente un 
desperdicio de recursos.

Por eso es mejor abrir la conexión al principio de un script y cerrarla 
al final, y si tienes funciones que recuperan datos como el caso de tu 
buscar alumno, en vez de abrir una conexión nueva, preguntes si ya hay 
una conexión abierta para aprovecharla.

Las conexiones persistentes son buenas cuando el volumen de los datos 
que va a retornar una consulta es demasiado grande y tienes miedo de que 
una conexión no persistente expire. De todas formas, la conexion no 
persistente expira en 1 minuto (configurable), y segun el 
php.ini-recommended, la ejecucion de un script expira en 30 segundos, 
por lo que no deberia aproblemarte esto.

Visto esto, respondamos tus preguntas:
> 1.- Hasta donde sé las conexiones persistentes son aquellas a las  que 
> te conectas, solamente si esta se abrió antes, en caso contrario se 
> abriria una nueva. Estando esta disponible para otra solicitud que se 
> requiera.
Cualquiera de las dos conexiones funciona así, la diferencia es que la 
persistente la abres una vez por usuario (o por conexion?) y la no 
persistente una vez por archivo y solo en los archivos que tienen 
conexiones a las bases de datos.
> 2.- Entonces  ¿entiendo que (en aplicación PHP ) debería crear una 
> sola conexion ??
No tan correcto. Deberías mantener una sola conexión abierta, lo cual es 
distinto.
> 3.- ¿Cuales son las ventajas entre utilizar un tipo de conexion 
> persistente o no persistente?
Las conexiones no persistentes te ahorran mucha memoria. Dificultan un 
poquito el código a veces, pero también lo hacen más comprensible, pues 
sabes de dónde sacas los datos.
> Nuevamente les agradeceria... su colaboracion. :D
>
> Juan Pablo 

Atte.

Rodrigo.


Más información sobre la lista de distribución PHP