Che cos'è il pool di database?


Risposte:


217

Il pool di connessioni al database è un metodo utilizzato per mantenere aperte le connessioni al database in modo che possano essere riutilizzate da altri.

In genere, l'apertura di una connessione al database è un'operazione costosa, soprattutto se il database è remoto. Devi aprire le sessioni di rete, autenticarti, controllare l'autorizzazione e così via. Il pool mantiene attive le connessioni in modo tale che, quando in seguito viene richiesta una connessione, una delle connessioni attive viene utilizzata preferibilmente per crearne un'altra.

Fare riferimento al diagramma seguente per i prossimi paragrafi:

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

Nella sua forma più semplice, è solo una chiamata API simile (1) a una chiamata API a connessione aperta che è simile a quella "reale". Questo controlla innanzitutto la connessione idonea al pool (2) e, se disponibile, viene fornita al client. Altrimenti ne viene creato uno nuovo (3).

Una "connessione adatta" è solo una che ha già accesso al database usando le informazioni corrette (come istanza del database, credenziali e possibilmente altre cose).

Allo stesso modo, c'è una chiamata API stretta (4) che in realtà non chiama la vera connessione di chiusura, ma inserisce la connessione nel pool (5) per un uso successivo. Ad un certo punto, le connessioni nel pool potrebbero essere effettivamente chiuse (6).

Questa è una spiegazione piuttosto semplicistica. Le implementazioni reali possono essere in grado di gestire le connessioni a più server e account utente multipli, possono pre-allocare alcune linee di base di connessioni in modo che alcune siano pronte immediatamente e potrebbero effettivamente chiudere le vecchie connessioni quando il modello di utilizzo si attenua.


9
Da dove hai il bel grafico?
Adrian Grigore,

19
L'ho fatto da zero (sciocco me). Se vuoi vedere una grafica decente, dai un'occhiata alla risposta di zengr.
paxdiablo,

1
Se uno è disponibile, viene fornito al client, altrimenti ne viene creato uno nuovo. Analogamente, esiste una chiamata API stretta che in realtà non chiama la vera connessione di chiusura, ma inserisce la connessione nel pool per un uso successivo. Come già detto, ho poche domande. Quando 1000 client richiedono una connessione e non chiuso. Quindi la connessione 1000 è viva nel pool. Questo andrà bene per le prestazioni del pool ?? E fammi sapere che la mia comprensione è poco sbagliata ??
Vinci il

@YeWin, no, suona bene. Per quanto riguarda la tua domanda circa 1000 connessioni rimaste nel pool, ciò può accadere, ma generalmente solo se finisci ad un certo punto con 1000 connessioni attive simultanee. Altrimenti, ci sarebbe un riutilizzo e non arriverebbe a 1000. In termini di ciò, vedere il mio penultimo paragrafo, in particolare il bit "potrebbe effettivamente chiudere vecchie connessioni quando il modello di utilizzo si attenua".
paxdiablo,

1
@DiegoMariani, più lento di se lo avessi fatto a mano, più veloce di se provassi a forzare MS Word a renderlo più semplice :-)
provassi paxdiablo

105

Le immagini parlano di mille parole (paxdiablo ha dato una descrizione fantastica):

testo alternativo

fonte


35
E a quanto pare, buone immagini parlano anche di alcune centinaia di pezzi di arte ASCII :-)
paxdiablo,

@sagar, seleziona la risposta che hai trovato più utile. Non hai record di accettazione.
zengr,

1
Ho visto 4 connessioni in Pool. Quindi il numero di connessione è limitato in questo pool dal tipo di pool ?? O cosa accadrà quando la connessione non è gratuita in Pool? Il client deve attendere la connessione gratis ??
Vinci il

1
@DEADEND Dipende davvero da come viene implementato il pool di connessioni. La maggior parte dei pool crea una nuova connessione quando le connessioni raggiungono la capacità massima. Questo può continuare a crescere fino a quando il db raggiunge una soglia. In alcuni casi (come oracle jdbc) è possibile specificare "dimensione iniziale" e "dimensione massima" durante la costruzione della piscina stessa.
zengr,

2
Sfortunatamente, l'immagine non dice la cosa più importante. Cioè: perché mantenere 10, 20, 30, ... il numero di connessioni aperte è meno costoso per la memoria e le prestazioni complessive del sistema rispetto all'apertura di una connessione quando richiesto? Come può essere 30 vs. 1 è meno costoso? Come?
Green,

16

Come suggerisce il nome. Se alcune persone vogliono nuotare, possono nuotare nella stessa piscina, ha davvero senso costruire una nuova piscina ogni volta che qualcuno si aggiunge? Tempo e costi sono una priorità.


7

Il pool di connessioni al database consiste semplicemente nella memorizzazione nella cache delle connessioni ai database in modo che possano essere riutilizzate la prossima volta per ridurre il costo di stabilire una nuova connessione ogni volta che vogliamo connetterci a un database.



1

Concetto di pool di connessioni non solo in Java ma in molti linguaggi di programmazione. La creazione di un nuovo oggetto di connessione è costosa, pertanto viene creato e gestito un numero fisso di connessioni nel ciclo di vita creando un pool virtuale Java Just ( http://javajust.com/javaques.html ) vedere la domanda 14 in questa pagina

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.