La création d'un pool de connexions de base de données
Besoin d'informations sur la création d'un pool de connexion à la base de données (indépendamment de la base de données) , et à quel point ils sont? Quelles sont les conditions où ils peuvent améliorer les performances.
Comment créer explicitement?
OriginalL'auteur Sachin Chourasiya | 2009-11-10
Vous devez vous connecter pour publier un commentaire.
Votre question est un peu ambigu:
Voulez-vous homegrow un pool de connexions de mise en œuvre? Si oui, c'est un bon point de départ: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html Mais c'est très déconseillé pour les environnements de production. Mieux utiliser un existant et testé le regroupement de connexion API, comme DBCP ou C3P0.
Ou voulez-vous savoir comment utilisation un pool de connexion? Si donc, la réponse dépend de la connexion de mise en commun de l'API que vous utilisez. Il est, heureusement, habituellement disponible sur le site de l'API en question.
Ou voulez-vous savoir quand/pourquoi d'utiliser un pool de connexion? Si oui, il va sûrement améliorer les performances de la connexion si vous avez une longue durée de vie de l'application (par exemple, une webapplication) et vous avez besoin de vous connecter la base de données le plus souvent. La normale JDBC pratique est à savoir: acquérir et fermer la
Connection
,Statement
etResultSet
dans le plus court étendue possible (c'est à dire à l'intérieur de la même méthode de bloc). Car la connexion est assez cher et peut prendre jusqu'à 200 ms de temps, voire plus, à l'aide d'un pool de connexion est beaucoup plus rapide. Il donne des connexions à la demande et prend soin sur le fait de fermer la connexion. Qui ne veut toutefois pas dire que vous pouvez changer la façon dont vous écrivez JDBC, vous avez encore besoin d'acquérir et de les fermer dans le shorest étendue possible. La seule chose que vous avez besoin de changer la façon dont vous acquérir la connexion. E. g. changement deà
Plus de changements sont nécessaires aussi longtemps que votre code JDBC est bien écrit.
OriginalL'auteur BalusC
La page d'intro à Apache DBCP le résume bien:
Comment efficace sont-ils ? Dépend de la mise en œuvre. Généralement, je m'attends à une piscine pour instancier des connexions soit au démarrage ou sur demande. La première connexion nécessitera une véritable connexion à la base de données, et par la suite, lorsque vous demandez une connexion, vous êtes donné un existant pool de connexion. Donc, la première demande de connexion prendra le plus de temps, et après vous êtes simplement en tirant des objets d'une collection (très rapide).
OriginalL'auteur Brian Agnew
Créer des connexions à des bases de données sont très coûteuses opérations. Les pools de connexion sont des instances de connexions de base de données qui sont créées et mises en cache. Chaque fois qu'une nouvelle connexion à une base de données est souhaitée, l'un de la piscine est utilisée au lieu de créer une nouvelle connexion. Certaines plates-formes comme .NET + SQL Server utiliser des pools de connexion par défaut (vous n'avez pas besoin de créer votre propre). Donc, en gros, ils améliorent la performance par le gain de temps dans la création de nouvelles connexions à chaque fois.
OriginalL'auteur stepanian
À l'aide d'un pool de connexion, vous gagnez du temps à chaque accès car la connexion est déjà établie.
En outre, au moins sur Oracle, vous gardez l'compilé déclaration liée à la connexion, donc répétitif de l'exécution de la même instruction SQL est encore plus rapide.
(voir PreparedStatement si vous êtes en Java/JDBC)
Le seul risque de contre-performance, c'est quand vous gardez trop de connexions inactives dans votre piscine, les ressources (de votre côté et sur la base de données) sont gaspillées.
Oui, vous avez tout à fait raison avec la base de données unique compte des préoccupations. (Cela peut être un problème lors de la migration à partir de C/S de l'application web par exemple, si l'autorisation est en DB, basé sur l'utilisateur connecté.)
OriginalL'auteur Fouteier
Ont un coup d'oeil à BoneCP (http://jolbox.com) dans le repère de la section pour certains numéros. Rappelez-vous que preparedStatements etc, sont liés à une connexion de sorte que vous aurez besoin pour préparer encore et encore si vous avez à traiter avec des connexions de vous-même (un pool de connexion de la mise en cache sera pour vous aussi).
Mon meilleur solution: Utiliser un lazyDataSource qui ne vous donne qu'une connexion lorsque vous en avez vraiment besoin (c'est à dire non à l'aveuglette - si les données peuvent provenir d'une cache, alors vous pouvez éviter de la base de données hit)
OriginalL'auteur wwadge
La création de la base de données du pool de connexion à l'aide de tomcat
1. Tomcat entrez des ressources à l'intérieur : conf/context.xml
Mettre la ressource entrées dans context.xml fichier:
2. créer une classe qui va créer le pool de connexion
3. modifier web.xml fichier
4. Utiliser dans le code
OriginalL'auteur AKT
La création d'une connexion de base de données peut ou peut ne pas être une opération coûteuse, en fonction de votre environnement et que vous voulez faire avec elle.
Si vous allez exécuter une seule très facile de requête, puis de connecter probablement la plus longue (ou plus) de celle de la requête.
Certaines bases de données ont beaucoup plus de connexions que d'autres; si réglée correctement, mysql devrait avoir très peu (au-dessus du temps pour faire une connexion tcp et ne le protocole de poignée de main). Toutefois, si la latence de votre serveur est très élevé, même cela peut être très important (surtout si vous avez l'intention de ne faire que quelques requêtes).
Si vous avez l'intention de faire, de dire, de 100 requêtes, ou un peu de vraiment requêtes lentes, puis le temps de connexion disparaît dans l'insignifiance.
Dans l'ensemble, je dirais ouvrir une nouvelle connexion à chaque fois jusqu'à ce que vous pouvez démontrer que c'est un vrai problème de performance. Utilisant le regroupement de connexion peut conduire à des BUGS, que l'on n'aime pas:
OriginalL'auteur MarkR