Qu'est-ce que la mise en commun de bases de données?


Réponses:


217

Le regroupement de connexions à la base de données est une méthode utilisée pour garder les connexions de base de données ouvertes afin qu'elles puissent être réutilisées par d'autres.

En règle générale, l'ouverture d'une connexion à une base de données est une opération coûteuse, en particulier si la base de données est distante. Vous devez ouvrir des sessions réseau, vous authentifier, faire vérifier l'autorisation, etc. Le regroupement maintient les connexions actives de sorte que, lorsqu'une connexion est demandée ultérieurement, l'une des connexions actives est utilisée de préférence à la nécessité d'en créer une autre.

Reportez-vous au diagramme suivant pour les quelques paragraphes suivants:

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

Dans sa forme la plus simple, il s'agit simplement d'un appel d'API similaire (1) à un appel d'API à connexion ouverte qui est similaire au "réel". Cela vérifie d'abord le pool pour une connexion appropriée (2) et, si elle est disponible, elle est donnée au client. Sinon, un nouveau est créé (3).

Est juste un qui déjà une « connexion appropriée » a accès à la base de données en utilisant les informations correctes (comme par exemple la base de données, les informations d' identification, et éventuellement d' autres choses).

De même, il y a un appel d'API close (4) qui n'appelle pas réellement la vraie connexion étroite, mais met plutôt la connexion dans le pool (5) pour une utilisation ultérieure. À un moment donné, les connexions dans le pool peuvent être effectivement fermées (6).

C'est une explication assez simpliste. Les implémentations réelles peuvent être en mesure de gérer les connexions à plusieurs serveurs et à plusieurs comptes d'utilisateurs, elles peuvent pré-allouer des connexions de base afin que certaines soient prêtes immédiatement, et elles peuvent en fait fermer les anciennes connexions lorsque le modèle d'utilisation se calme.


9
D'où vient le joli petit graphique?
Adrian Grigore

19
Je l'ai fait à partir de zéro (idiot moi). Si vous voulez voir des graphismes décents, jetez un œil à la réponse de zengr.
paxdiablo

1
Si un est disponible, il est donné au client, sinon un nouveau est créé.De même, il y a un appel d'API close qui n'appelle pas réellement la vraie connexion étroite, mais qui place la connexion dans le pool pour une utilisation ultérieure. Comme vous le mentionnez, j'ai une petite question. Lorsque 1000 clients demandent une connexion et ne sont pas fermés. Donc 1000 connexions sont actives dans la piscine. Cela sera bon pour les performances de la piscine ?? Et laissez-moi savoir que ma compréhension est un peu fausse ??
Ye Win

@YeWin, non ça sonne bien. Re votre question sur 1000 connexions restant dans le pool, cela peut arriver, mais généralement seulement si vous vous retrouvez à un moment donné avec 1000 connexions actives simultanées. Sinon, il y aurait réutilisation et il n'atteindrait pas 1000. Pour ce faire, voyez mon avant-dernier paragraphe, en particulier le bit "peut effectivement fermer les anciennes connexions lorsque le modèle d'utilisation se calme".
paxdiablo

1
@DiegoMariani, plus lent que si je l'avais fait à la main, plus vite que si
j'essayais

105

Les images parlent mille mots (paxdiablo a donné une superbe description):

texte alternatif

La source


35
Et apparemment, de bonnes images parlent aussi de quelques centaines d'œuvres d'art ASCII :-)
paxdiablo

@sagar veuillez sélectionner la réponse que vous avez trouvée la plus utile. Vous n'avez aucun enregistrement d'acceptation.
zengr

1
J'ai vu 4 connexions dans Pool.So le numéro de connexion est restreint dans ce pool par type de pool ou que se passe-t-il lorsque la connexion n'est pas libre dans Pool? Le client doit attendre la connexion gratuite?
Ye Win

1
@DEADEND Cela dépend vraiment de la façon dont le pool de connexions est implémenté. La plupart des pools créent une nouvelle connexion lorsque les connexions atteignent la capacité maximale. Cela peut continuer à augmenter jusqu'à ce que la base de données atteigne un seuil. Dans certains cas (comme oracle jdbc), vous pouvez spécifier "taille initiale" et "taille max" pendant la construction de la piscine elle-même.
zengr

2
Malheureusement, l'image ne dit pas la chose la plus importante. C'est-à-dire: pourquoi garder 10, 20, 30, ... nombre de connexions ouvertes est moins coûteux pour la mémoire et les performances globales du système que d'ouvrir une connexion lorsque cela est nécessaire? Comment ça peut être? 30 contre 1 est moins coûteux? Comment?
Vert

16

Comme le nom le suggère. Si quelques personnes veulent nager, elles peuvent nager dans la même piscine, est-ce vraiment logique de construire une nouvelle piscine à chaque fois que quelqu'un ajoute? Le temps et le coût sont une priorité.


7

Le regroupement de connexions de base de données consiste simplement à mettre en cache les connexions aux bases de données afin qu'elles puissent être réutilisées la prochaine fois afin de réduire le coût d'établissement d'une nouvelle connexion chaque fois que nous souhaitons nous connecter à une base de données.



1

Concept de regroupement de connexions non seulement en Java mais dans de nombreux langages de programmation. La création d'un nouvel objet de connexion est coûteuse, donc un nombre fixe de connexions est établie et maintenue dans le cycle de vie création d'un pool virtuel Java Just ( http://javajust.com/javaques.html ) voir question 14 sur cette page

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.