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