Pool de conexiones

Un pool de conexiones es un conjunto limitado de conexiones a una base, que es manejado por un servidor de aplicaciones de forma tal, que dichas conexiones pueden ser reutilizadas por los diferentes usuarios. Este pool es administrado por un servidor de aplicaciones que va asignando las conexiones a medida que los clientes van solicitando consultas o actualizaciones de datos.

 

Tanto las aplicaciones web como las aplicaciones win 3 capas utilizan este pool de conexiones, los que las hace arquitecturas ventajosas frente a una arquitectura tradicional de cliente / servidor (2 capas).

 

El pool permite tener centralizado y controlado el manejo de las conexiones a la base de datos, ya que el acceso a la misma no se hace desde el cliente, como en una aplicación en 2 capas, sino que en este tipo de aplicación el acceso es realizado por el servidor de aplicaciones. Para ello podemos utilizar un pool de conexiones a la base de datos.

 

La cantidad de conexiones abiertas a una base de datos es limitada, dado que consumen muchos recursos del servidor de base de datos, y se requiere memoria y tiempo del procesador por cada nueva conexión. El manejo de un pool favorece la escalabilidad y performance de una aplicación.

 

En las aplicaciones cliente/servidor tradicionales, se mantiene una conexión a la base de datos por cada cliente final, esto es, si tenemos 100 clientes finales tendremos 100 conexiones a la base de datos.

Esto es aceptable para aplicaciones con un número de clientes relativamente pequeño, pero es inconveniente cuando la cantidad de clientes es grande, o impredecible (como en aplicaciones en Internet), por varias razones:

 

·         La carga al servidor de base de datos es mayor cuantas más conexiones abiertas haya.

·         En la mayoría de los DBMS se debe comprar una licencia de uso por cada usuario conectado.

·         No es óptimo, dado que la mayoría de las conexiones están sin hacer nada una parte importante del tiempo.

 

La solución a estos problemas es permitir el compartir conexiones a la base de datos entre los diferentes clientes de la aplicación, de modo de que existan menos conexiones físicas a la base que clientes ejecutando la aplicación.

 

La idea general de un pool de conexiones, es que cada vez que un cliente necesita una conexión (esto es, cada vez que prepara un cursor, lo ejecuta, ejecuta una sentencia directamente, etc.), se la solicita al pool. Esta conexión pertenece al cliente hasta que de algún modo se determina que no la necesita más, y en ese momento se le puede asignar la conexión a otro cliente.

 

Si un cliente necesita una conexión y no existe ninguna disponible, se queda esperando hasta que alguna conexión se libere.

 

Otra ventaja es que las conexiones se mantienen abiertas, por lo que los clientes se ahorran el tiempo de conexión al DBMS al iniciar la aplicación.