Grupo de conexión de base de datos Java(BoneCP vs DBPool vs c3p0)
database connection-pooling (6)
Para una aplicación Java fuera de un contenedor J2EE, ¿qué biblioteca de agrupación de conexiones es la mejor?
- Escuché que c3p0 se está desactualizando.
- La biblioteca común de Yakarta ya no está en desarrollo
Por lo tanto me quedo con BoneCP y DBPool . Por lo que puedo decir, ambos tienen una actividad limitada. La principal diferencia que puedo ver es el rendimiento, que BoneCP parece ganar. Sin embargo, la documentación es bastante débil.
¿Qué biblioteca de bases de datos ha utilizado en el mundo real y por qué? ¿Qué fue lo bueno y lo malo?
Actualmente estoy probando BoneCP en un entorno de intranet de grandes empresas. Tuve problemas de subprocesos constantes con c3p0 (bastante comunes si investigas), así que hice mi investigación y me pareció la mejor biblioteca de stock. La configuración es un poco un ejercicio, pero una vez que lo logras, parece genial.
Cuando hicimos nuestra elección hace un par de años, fue solo entre c3p0 y dbcp. En ese momento, c3p0 era el que podía reconstruir sus conexiones después de reiniciar oracle. Con DBCP tuvimos que reiniciar el servidor de aplicaciones para que se ejecute de nuevo.
También me parece que la función de conexiones colgantes de depuración c3p0 es extremadamente útil para rastrear las fugas de conexión que de otra manera pueden ser extremadamente difíciles de encontrar.
Lo que faltaba de c3p0 es un registro útil para las declaraciones ejecutadas con información sobre el tiempo que tardaron.
Eche un vistazo a HikariCP que reemplaza a BoneCP https://brettwooldridge.github.io/HikariCP/ Este es el que estoy usando ahora en mi proyecto.
En el trabajo, hemos utilizado BoneCP (como reemplazo de c3p0) y, que yo sepa, no he tenido ningún problema (no realicé la actualización por mi cuenta). Por lo que he visto y leído, parece una biblioteca sólida bien diseñada, y yo personalmente la usaría sobre otras alternativas: parece ser una de esas bibliotecas de "solo funciona" que es bueno tener a mano.
Nada negativo que decir sobre DBPool, simplemente no estoy lo suficientemente familiarizado con él; Aunque mirar la documentación de su sitio sin duda parece ser una ventaja.
Estaba usando c3p0 junto con DataNucleus / JPA y fue fácil cambiar a BoneCP. Prácticamente todo lo que tuve que hacer es cambiar la configuración de DataSource en el archivo de contexto de Spring.
Por lo que vi, los puntos de referencia BoneCP son realmente buenos: http://www.databaseskill.com/2282333/ , http://jolbox.com/benchmarks.html
Utilizamos C3P0 tanto dentro como fuera de Tomcat. Sin embargo, la supervisión y el registro no son los mejores, por lo que vamos a comenzar a usar el grupo de conexión SpringSource. Una de las mejores características que espero es mostrar exactamente qué sentencias de SQL se ejecutan en un momento determinado.
Una cosa que tuvimos que agregar a C3P0 fue un medio para medir cuánto tiempo una solicitud de conexión particular espera una conexión cuando el grupo está lleno y todas las conexiones están ocupadas:
public Connection getConnection() throws SQLException
{
long t = System.currentTimeMillis();
ComboPooledDataSource ds = (ComboPooledDataSource) getDelegate();
Connection conn = null;
if (ds.getNumBusyConnections() == ds.getMaxPoolSize())
{
logger.info("Pool (" + ds.getUser() + ") full, waiting for connection");
conn = ds.getConnection();
t = System.currentTimeMillis() - t;
logger.info("Connection busy wait time (" + ds.getUser() + "): " + t + "ms");
}
else
{
conn = ds.getConnection();
}
return conn;
}
Así que las cosas que hay que tener en cuenta:
- apoyo y actividad (como has notado)
- velocidad
- Monitoreo, registro y control de producción.
BoneCP parece rápido (no he oído hablar de eso antes) pero, sinceramente, C3P0 también ha sido más que rápido para nosotros. Cuando probamos hace unos 4 o 5 años, el DBCP era terriblemente lento (parece que lo habían solucionado), el grupo de Oracle era bastante lento y el C3P0 era muy rápido. Nuestra prueba se parecía mucho a la del sitio de BoneCP.
No sé nada sobre la manejabilidad de BoneCP. # 3 ha resultado ser la funcionalidad más importante en un entorno de producción para nosotros.