Pool de conexiones en PHP

Julio Araya julioarayacerda en gmail.com
Jue Feb 9 17:11:38 CLST 2006


On 2/8/06, JuanPa <juanpablo.magno en gmail.com> wrote:
>
> [Reenviado, el codigo estaba un poco pequeño]
> Hola a todos foristas...
> Estoy implementando un sistema de registro de alumnos en PHP5 / Postgres
> con tres capas, no estoy utilizando ningun framework o uno de esos otros
> chiches (quisiera toparme con estos problemillas primero). Mi consulta
> radica en la forma en que hago mis conexiones de base datos, si bien es
> cierto hay q dejar todo el peso de las conexiones a la capa de persistencia
> de datos, esto hace q abra y cierre las conexiones a cada rato.
> Por ejemplo en el caso de cargar un objeto alumno haria:
>  Código PHP:
>    function buscarAlumno( $codigo){
>     $con = new Conexion ();
>     $con->conectarse();
>
>      // hago mi consulta
>     $con->query( $sql)
>
>     $alumno = new Alumno ();
>     $alumno->colegio =  Colegio::buscarColegio($data[ "cod_colegio"]);
>     //este metodo internamente tambien abre y cierra una conexion;
>      $alumno->ciudad = Colegio:: buscarCiudad($data["cod_ciudad" ]);
>     //esta tambien
>     //... y cuantas tuviera
>
>     $con ->cerrar_conexion();
>     // cerramos la conexion de al inicio
>      return $alumno;
> }
>
KATE O KWRITE :P



Esto abriria y cerraria muchas conexiones por lo q reventaria el limite de
> estas.


depende si estas tu motor de base de datos soporta conexiones persistentes y
no cierras las conexiones no deberia reventar


Otro caso es este:
>  Código PHP:
>
> function buscarAlumno($con ,$codigo){
>     $alumno = new  Alumno();
>     // hago mi consulta
>     $con ->query($sql)
>     $alumno ->colegio = Colegio:: buscarColegio($con,$data ["cod_colegio"
> ]);
>     //usa la conexion ya disponible;
>      $alumno->ciudad = Colegio:: buscarCiudad($con,$data ["cod_ciudad"]);
>     //este tambien
>     //... y cuantas tuviera
>
>      return $alumno;
> }
>
> Aqui mando mi conexion abierta desde fuera, pero esto haria que el que
> abra mi conexion sea mi capa de logica de negocio, pero supuestamente esta
> no debería ser su funcion, ademas imaginemos q el metodo de la capa de
> logica sea un poco extensa, la conexion estaria abierta mucho tiempo, y eso
> tambien acarrearia problemas.
> La pregunta del millon es esta...
> ¿Cual de las dos formas es la mas optima a utilizar?
>

mmm no me convence ninguna



¿Existe una tercera forma?
>

si y una cuarta y una quinta....etc



¿Que hay de los pool de conexiones.. me comentaban que evitaban estos
> problemas?
>

No me suena, pero....


Utiliza clases de acceso a datos (onda class ColegioDAO) y que estos DAOs
sea los encargados de abrir(no de cerrar) conexiones con la base de datos.
La idea es que estos DAOs se comuniquen con algun DAOConnector.php y en este
archivo se abran las conexiones a la base de datos(o las bases de datos),
asi como tambien almacenar cualquier configuracion adicional de conexion
este en DAOConnector. De esta manera la capa de negocios solamente se
entendera con los DAOs y ellos verán como obtienen los datos y los
empaquetaran en los Beans(crea unos Beans(onda class ColegioBean) que tenga
sus getters y setters(no se si esta bien escrito) y que estos sean los
encargados de llevar la informacion empaquetada)

Ahora bien... PHP automaticamente liberará todos los resources que no se
esten ocupando al finalizar el script por lo que no es necesario cerrar las
conexiones a las bases de datos(con conexiones persistentes) PHP se
encargará cuando sea necesario(algo asi como un recolector de basura de
JAVA)



Esto ultimo no lo he investigado
> Agredecere cualquier colaboracion.
> --
> Juan Pablo
>

saludos!

--
Julio Araya C.                                       Linux User #386141
Estudiante de Ingeniería Civil Informatica           Valparaiso - Chile
Universidad Tecnica Federico Santa Maria
http://www.alumnos.utfsm.cl/~julio.araya
http://www.arriendocasas.cl
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listas.inf.utfsm.cl/pipermail/php/attachments/20060209/ee40b698/attachment.html


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