Java Database connection pool (BoneCP vs DBPool vs c3p0)
pour une application Java dehors d'un conteneur J2EE, quelle bibliothèque de pool de connexion est la meilleure?
- j'ai entendu dire que c3p0 devient périmé.
- la bibliothèque commune de Jakarta n'est plus en développement
Donc je suis parti avec BoneCP et DBPool. De ce que je peux dire, les deux ont une activité limitée. La principale différence que je peux voir est la performance, qui BoneCP semble gagner avec. Cependant, l' la documentation est plutôt faible.
quelle bibliothèque de bases de données Avez-vous utilisée dans le monde réel et pourquoi? Quel a été le bon et le mauvais?
6 réponses
au travail, nous avons utilisé BoneCP (pour remplacer c3p0) et pour autant que je sache, nous n'avons eu aucun problème (je n'ai pas fait la mise à jour moi-même). D'après ce que j'ai vu et lu, il semble qu'il s'agisse d'une bibliothèque solide et bien conçue, et je l'utiliserais personnellement au-dessus des alternatives: il semble qu'il s'agisse d'une de ces bibliothèques "juste des travaux" qui sont agréables à avoir autour.
rien de négatif à dire sur DBPool, Je ne suis tout simplement pas assez familier avec elle; bien que regardant sa documentation de site semble certainement comme un plus.
nous utilisons du C3P0 à L'intérieur et à l'extérieur de Tomcat. Cependant, la surveillance et la journalisation ne sont pas les meilleures, donc nous allons commencer à utiliser le pool de connexion SpringSource. Une des meilleures fonctionnalités que je suis impatient de montrer exactement ce que les déclarations SQL sont en cours d'exécution à un moment particulier.
une chose que nous avons dû ajouter à C3P0 était un moyen de chronométrer combien de temps une requête de connexion particulière attend pour une connexion lorsque la piscine est pleine et que toutes les connexions sont occupé:
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;
}
alors les choses que vous devez considérer:
- support et de l'activité (comme vous l'avez remarqué)
- vitesse
- surveillance, journalisation et contrôle de la production
BoneCP semble rapide (je n'en ai pas entendu parler avant) mais honnêtement C3P0 a été plus que rapide pour nous aussi. Quand nous avons testé il y a 4 ou 5 ans le DBCP était horriblement lent (ils semblent l'avoir corrigé), le pool D'Oracle était assez lent, et C3P0 était très rapide. Notre test ressemblait beaucoup à celui du site de BoneCP.
Je ne sais rien sur la maniabilité de BoneCP. #3 s'est avéré être la fonctionnalité la plus importante dans un environnement de production pour nous.
jetez un coup d'oeil à HikariCP qui remplace BoneCP https://brettwooldridge.github.io/HikariCP/ C'est celui que j'utilise maintenant dans mon projet.
Lorsque nous avons fait notre choix il y a quelques années, c'était juste entre c3p0 et dbcp. À cette époque, c3p0 était celui qui pouvait reconstruire ses connexions après le redémarrage d'oracle. Avec DBCP, nous avons dû redémarrer le serveur app pour qu'il tourne à nouveau.
je trouve aussi que c3p0 debug hanging connections est extrêmement utile pour suivre les fuites de connexion qui peuvent être extrêmement difficiles à trouver.
ce que je manquais dans c3p0 est la journalisation utile pour exécuté des déclarations contenant des informations sur le temps qu'elles ont pris.
je suis en train de tester BoneCP dans un environnement intranet de grande entreprise. J'ai eu des problèmes constants de threading avec c3p0 (assez communs si vous creusez autour), donc j'ai fait mes recherches et il semblait être la meilleure bibliothèque de stock. La configuration est un peu un exercice, mais une fois que vous obtenez ce vers le bas, il semble grand.
j'utilisais c3p0 avec DataNucleus / JPA et il était facile de passer à BoneCP. Pratiquement tout ce que j'ai eu à faire est de changer la configuration de la source de données dans le fichier de contexte du ressort.
d'après ce que j'ai vu, les points de repère du BoneCP sont vraiment bons:http://www.databaseskill.com/2282333/, http://jolbox.com/benchmarks.html