Was ist Datenbankpooling?

Antworten:

217

Datenbank - Verbindung - Pooling ist eine Methode verwendet , um Datenbankverbindungen offen zu halten , damit sie von anderen wiederverwendet werden.

Das Öffnen einer Datenbankverbindung ist normalerweise ein teurer Vorgang, insbesondere wenn die Datenbank remote ist. Sie müssen Netzwerksitzungen öffnen, sich authentifizieren, die Autorisierung überprüfen lassen usw. Durch das Pooling bleiben die Verbindungen aktiv, sodass bei einer späteren Anforderung einer Verbindung eine der aktiven verwendet wird, anstatt eine andere erstellen zu müssen.

Beziehen Sie sich für die nächsten Absätze auf das folgende Diagramm:

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

In seiner einfachsten Form ist es nur ein ähnlicher API-Aufruf (1) wie ein API-Aufruf mit offener Verbindung, der dem "echten" ähnlich ist. Dies überprüft zuerst den Pool auf eine geeignete Verbindung (2) und wenn eine verfügbar ist, wird diese dem Client übergeben. Andernfalls wird eine neue erstellt (3).

Eine „geeignete Verbindung“ ist nur eine , die bereits hat Zugriff auf die Datenbank die richtigen Informationen (wie Datenbankinstanz, Anmeldeinformationen und möglicherweise andere Dinge) verwenden.

In ähnlicher Weise gibt es einen API-Aufruf zum Schließen (4), der die eigentliche enge Verbindung nicht aufruft, sondern die Verbindung zur späteren Verwendung in den Pool (5) stellt. Irgendwann können Verbindungen im Pool tatsächlich geschlossen werden (6).

Das ist eine ziemlich vereinfachende Erklärung. Echte Implementierungen können möglicherweise Verbindungen zu mehreren Servern und mehreren Benutzerkonten verarbeiten, sie können einige Verbindungsgrundlagen vorab zuweisen, sodass einige sofort bereit sind, und sie können alte Verbindungen tatsächlich schließen, wenn sich das Nutzungsmuster beruhigt.

paxdiablo
quelle
9
Woher hast du die schöne kleine Grafik?
Adrian Grigore
19
Ich habe es von Grund auf neu gemacht (dumm mich). Wenn Sie anständige Grafiken sehen möchten, schauen Sie sich die Antwort von zengr an.
Paxdiablo
1
Wenn eine verfügbar ist, wird diese dem Client übergeben, andernfalls wird eine neue erstellt. Ähnlich gibt es einen API-Aufruf zum Schließen, bei dem die echte enge Verbindung nicht aufgerufen wird, sondern die Verbindung zur späteren Verwendung in den Pool gestellt wird. Als Sie dies erwähnen, habe ich wenig Frage. Bei 1000 Clientanforderung Verbindung und nicht geschlossen. Also 1000 Verbindung im Pool lebt. Dies wird gut für die Poolleistung? Und lassen Sie mich wissen, dass mein Verständnis wenig falsch ist?
Sie gewinnen
@ YeWin, nein das hört sich gut an. Bezüglich Ihrer Frage, ob 1000 Verbindungen im Pool verbleiben, kann dies im Allgemeinen nur passieren, wenn Sie irgendwann 1000 gleichzeitig aktive Verbindungen haben. Andernfalls würde es eine Wiederverwendung geben und es würde nicht 1000 erreichen. In Bezug auf dieses Ereignis siehe meinen vorletzten Absatz, insbesondere das Bit "Möglicherweise werden alte Verbindungen tatsächlich geschlossen, wenn sich das Verwendungsmuster beruhigt".
Paxdiablo
1
@DiegoMariani, langsamer als wenn ich es von Hand gemacht hätte, schneller als wenn ich versuchen würde, MS Word dazu zu zwingen, es einfacher zu machen :-)
paxdiablo
104

Bilder sagen mehr als tausend Worte (paxdiablo gab eine großartige Beschreibung):

Alt-Text

Quelle

zengr
quelle
35
Und anscheinend sprechen gute Bilder auch ein paar hundert Stücke ASCII-Kunst :-)
paxdiablo
@sagar Bitte wählen Sie die Antwort aus, die Sie am nützlichsten fanden. Sie haben keine Akzeptanzaufzeichnung.
Zengr
1
Ich habe 4 Verbindungen im Pool gesehen. Also ist die Verbindungsnummer in diesem Pool durch den Pooling-Typ beschränkt? Oder was passiert, wenn die Verbindung im Pool nicht frei ist? Client muss Verbindung frei warten?
Sie gewinnen
1
@DEADEND Es hängt wirklich davon ab, wie der Verbindungspool implementiert ist. Die meisten Pools stellen eine neue Verbindung her, wenn die Verbindungen die maximale Kapazität erreichen. Dies kann weiter wachsen, bis die Datenbank eine Schwelle erreicht. In einigen Fällen (wie bei oracle jdbc) können Sie während der Poolkonstruktion selbst "Anfangsgröße" und "Maximalgröße" angeben.
Zengr
2
Leider sagt das Bild nicht das Wichtigste. Das heißt: Warum ist es für den Speicher und die Gesamtsystemleistung weniger kostspielig, die Anzahl der geöffneten Verbindungen 10, 20, 30, ... beizubehalten, als bei Bedarf eine Verbindung zu öffnen? Wie es sein kann? 30 vs. 1 ist weniger teuer? Wie?
Grün
16

Wie der Name schon sagt. Wenn ein paar Leute schwimmen wollen, können sie im selben Schwimmbad schwimmen. Ist es wirklich sinnvoll, jedes Mal, wenn jemand etwas hinzufügt, ein neues Schwimmbad zu bauen? Zeit und Kosten haben Priorität.

vdegenne
quelle
7

Beim Pooling von Datenbankverbindungen werden Verbindungen zu Datenbanken einfach zwischengespeichert, damit sie beim nächsten Mal wiederverwendet werden können, um die Kosten für den Aufbau einer neuen Verbindung jedes Mal zu senken, wenn eine Verbindung zu einer Datenbank hergestellt werden soll.

Peter
quelle
1

Connection Pooling-Konzept nicht nur in Java, sondern in vielen Programmiersprachen. Das Erstellen eines neuen Verbindungsobjekts ist kostspielig, sodass im Lebenszyklus eine feste Anzahl von Verbindungen hergestellt und verwaltet wird. Erstellen eines virtuellen Pools Java Just ( http://javajust.com/javaques.html ) siehe Frage 14 auf dieser Seite

Sandhya Saini
quelle