¿Qué es la agrupación de bases de datos?

Respuestas:

217

La agrupación de conexiones de bases de datos es un método utilizado para mantener abiertas las conexiones de bases de datos para que otros puedan reutilizarlas.

Por lo general, abrir una conexión de base de datos es una operación costosa, especialmente si la base de datos es remota. Debe abrir sesiones de red, autenticar, verificar la autorización, etc. La agrupación mantiene las conexiones activas para que, cuando se solicite una conexión más tarde, se use una de las activas en lugar de tener que crear otra.

Consulte el siguiente diagrama para los próximos párrafos:

  +---------+
  |         |
  | Clients |
+---------+ |
|         |-+  (1)   +------+   (3)    +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
|         |    |     +------+          +----------+
+---------+    |         ^
               |         | (2)
               |     /------\
               |     | Pool |
               |     \------/
           (4) |         ^
               |         | (5)
               |     +-------+   (6)   +-----------+
               #===> | Close | ======> | RealClose |
                     +-------+         +-----------+

En su forma más simple, es solo una llamada API similar (1) a una llamada API de conexión abierta que es similar a la "real". Esto primero verifica que el grupo tenga una conexión adecuada (2) y, si hay una disponible, se la da al cliente. De lo contrario, se crea uno nuevo (3).

Una "conexión adecuada" es aquella que ya tiene acceso a la base de datos utilizando la información correcta (como la instancia de la base de datos, las credenciales y posiblemente otras cosas).

Del mismo modo, hay una llamada API cercana (4) que en realidad no llama a la conexión cercana real , sino que pone la conexión en el grupo (5) para su uso posterior. En algún momento, las conexiones en el grupo pueden estar realmente cerradas (6).

Esa es una explicación bastante simplista. Las implementaciones reales pueden manejar conexiones a múltiples servidores y múltiples cuentas de usuario, pueden preasignar alguna línea base de conexiones para que algunas estén listas de inmediato, y en realidad pueden cerrar conexiones viejas cuando el patrón de uso se calma.

paxdiablo
fuente
9
¿De dónde tienes la pequeña gráfica?
Adrian Grigore
19
Lo hice desde cero (tonto). Si desea ver algunos gráficos decentes, eche un vistazo a la respuesta de zengr.
paxdiablo
1
Si hay uno disponible, se lo da al cliente, de lo contrario se crea uno nuevo. De manera similar, hay una llamada API cercana que en realidad no llama a la conexión cercana real, sino que pone la conexión en el grupo para su uso posterior. Como mencionas esto, tengo una pequeña pregunta. Cuando 1000 clientes solicitan conexión y no están cerrados. Entonces, la conexión 1000 está activa en el grupo. ¿Esto será bueno para el rendimiento del grupo? ¿Y déjame saber que mi comprensión está un poco mal?
Ye Win
@YeWin, no, eso suena bien. Vuelva a su pregunta acerca de que quedan 1000 conexiones en el grupo, eso puede suceder, pero generalmente solo si termina en algún momento con 1000 conexiones activas concurrentes. De lo contrario, habría reutilización y no llegaría a 1000. En términos de que eso suceda, vea mi penúltimo párrafo, particularmente el bit "en realidad puede cerrar conexiones antiguas cuando el patrón de uso se calma".
paxdiablo
1
@DiegoMariani, más lento que si lo hubiera hecho a mano, más rápido que si tratara de obligar a MS Word a hacerlo más fácil :-)
paxdiablo
105

Las imágenes hablan más que mil palabras (paxdiablo dio una descripción increíble):

texto alternativo

Fuente

zengr
fuente
35
Y aparentemente, las buenas imágenes también hablan unos cientos de piezas de arte ASCII :-)
paxdiablo
@sagar, seleccione la respuesta que le resultó más útil. No tienes registro de aceptación.
zengr
1
Vi 4 conexiones en Pool. ¿Entonces el número de conexión está restringido en este pool por tipo de pool? ¿O qué sucederá cuando la conexión no esté libre en Pool? ¿El cliente necesita esperar la conexión gratis?
Ye Win
1
@DEADEND Realmente depende de cómo se implemente el grupo de conexiones. La mayoría de los grupos crean una nueva conexión cuando las conexiones alcanzan la capacidad máxima. Esto puede seguir creciendo hasta que la base de datos alcance un umbral. En algunos casos (como oracle jdbc) puede especificar "tamaño inicial" y "tamaño máximo" durante la construcción de la piscina.
zengr
2
Desafortunadamente, la imagen no dice lo más importante. Es decir: ¿por qué mantener 10, 20, 30, ... número de conexiones abiertas es menos costoso para la memoria y el rendimiento general del sistema que abrir una conexión cuando es necesario? ¿Como puede ser? 30 vs 1 es menos costoso? ¿Cómo?
Verde
16

Como el nombre sugiere. Si algunas personas quieren nadar, pueden nadar en la misma piscina, ¿tiene sentido construir una nueva piscina cada vez que alguien agrega? El tiempo y el costo son una prioridad.

vdegenne
fuente
7

La agrupación de conexiones de base de datos es simplemente almacenar en caché las conexiones a las bases de datos para que puedan reutilizarse la próxima vez para reducir el costo de establecer una nueva conexión cada vez que queramos conectarnos a una base de datos.

Peter
fuente
1

Concepto de agrupación de conexiones no solo en Java sino en muchos lenguajes de programación. Crear un nuevo objeto de conexión es costoso, por lo que se realiza y mantiene un número fijo de conexiones en el ciclo de vida creando un grupo virtual Java Just ( http://javajust.com/javaques.html ), consulte la pregunta 14 en esta página

Sandhya Saini
fuente