example c3po database connection-pooling c3p0

database - c3po - ¿Cuál es el beneficio de Connection and Statement Pooling?



hibernate-c3p0 maven (5)

¿Puede alguien explicar qué es Connection and Statement Pooling y cuál es el beneficio sobre DataSources no agrupados? Intento entender cuándo es una buena idea usar una tecnología como c3p0 o proxool en un proyecto. Primero necesito entender lo que hacen y cuándo es interesante usarlos. Muchas gracias.


Conectarse y desconectarse de una base de datos es una operación costosa. Al utilizar la agrupación, puede escribir su código para abrir y cerrar conexiones, pero el grupo decide cuándo hacerlo, dejando un cierto número de conexiones abiertas durante un tiempo determinado.

Agrupación de declaraciones ¿Estás hablando de caché de sentencias?


Crear una conexión de red a un servidor de base de datos es (relativamente) costoso. Asimismo, pedirle al servidor que prepare una declaración SQL es (relativamente) costoso.

Usando un grupo de conexión / declaración, puede reutilizar las conexiones existentes / las declaraciones preparadas, evitando el costo de iniciar una conexión, analizar SQL, etc.


Citando el libro JAVA Persistance with Hibernate

Hay tres razones para usar un grupo:

  • Adquirir una nueva conexión es costoso. Algunos sistemas de administración de bases de datos incluso comienzan un proceso de servidor completamente nuevo para cada conexión.

  • El mantenimiento de muchas conexiones inactivas es costoso para un sistema de administración de bases de datos, y el grupo puede optimizar el uso de conexiones inactivas (o desconectarse si no hay solicitudes).

  • Crear sentencias preparadas también es costoso para algunos controladores, y el grupo de conexiones puede almacenar en caché las declaraciones para las conexiones entre las solicitudes.


No estoy familiarizado con c3p0, pero los beneficios de agrupar conexiones y declaraciones incluyen:

  1. Actuación. Conectarse a la base de datos es costoso y lento. Las conexiones agrupadas pueden dejarse físicamente conectadas a la base de datos y compartirse entre los diversos componentes que necesitan acceso a la base de datos. De esta forma, el costo de conexión se paga una vez y se amortiza en todos los componentes consumidores.

  2. Diagnostico Si tiene un subsistema responsable de conectarse a la base de datos, resulta más fácil diagnosticar y analizar el uso de la conexión de la base de datos.

  3. Mantenibilidad Nuevamente, si tiene un subsistema responsable de entregar las conexiones de la base de datos, su código será más fácil de mantener que si cada componente se conectara a la base de datos.


La conexión feliz

Es tan fácil crear una nueva conexión todo el tiempo. Una línea: eso es todo lo que se necesita. No hay mucho en que pensar Gran vida.

Espere. ¿Comes en un plato?

¿Desechas tu plato después de cada uso?

No, lo lavas y lo pones en el escurreplatos, para que puedas volver a usarlo en tu próxima comida. Comprar nuevas placas cada vez está fuera de discusión. Si lo hiciste, habrás desperdiciado suficiente dinero para comprar un iPad nuevo en un año.

Piense en los grupos de conexiones nuevamente.

Pero esta vez, las conexiones son tus platos, el grupo de conexiones es tu escurreplatos. Su billetera y su energía representan los recursos del sistema (memoria y ancho de banda).

¿Lavar o gastar?

Qué preferirías hacer:

a. lavar los platos

segundo. o correr al centro comercial cada comida y comprar platos nuevos?

Si bien hay tareas relacionadas con el agrupamiento de conexiones, a la larga son menos exigentes en comparación con la creación de nuevas conexiones en todo momento. La clave está en saber cuántos platos (conexiones) necesitará su familia (aplicación) en un día determinado.

Las agrupaciones se pueden usar para conexiones de bases de datos, subprocesos, beans de entidad y otros objetos derivados de fábrica.