Chciałem tylko poznać koncepcję buforowania połączeń z bazą danych i poznać sposób jej osiągnięcia.
Odpowiedzi:
Pule połączeń z bazą danych to metoda służąca do utrzymywania otwartych połączeń z bazą danych, dzięki czemu mogą być ponownie wykorzystywane przez innych.
Zwykle otwieranie połączenia z bazą danych jest kosztowną operacją, zwłaszcza jeśli baza danych jest zdalna. Musisz otworzyć sesje sieciowe, uwierzytelnić się, sprawdzić autoryzację i tak dalej. Buforowanie utrzymuje połączenia aktywne, więc gdy później zażąda się połączenia, jedno z aktywnych jest używane zamiast tworzyć inne.
Poniższy diagram zawiera kilka następnych akapitów:
+---------+
| |
| Clients |
+---------+ |
| |-+ (1) +------+ (3) +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
| | | +------+ +----------+
+---------+ | ^
| | (2)
| /------\
| | Pool |
| \------/
(4) | ^
| | (5)
| +-------+ (6) +-----------+
#===> | Close | ======> | RealClose |
+-------+ +-----------+
W najprostszej formie jest to po prostu podobne wywołanie API (1) do wywołania API otwartego połączenia, które jest podobne do "prawdziwego". Najpierw sprawdza pulę pod kątem odpowiedniego połączenia (2) i, jeśli jest dostępne, zostaje przekazane klientowi. W przeciwnym razie tworzony jest nowy (3).
„Odpowiednie połączenie” to takie, które ma już dostęp do bazy danych przy użyciu poprawnych informacji (takich jak instancja bazy danych, poświadczenia i być może inne rzeczy).
Podobnie, istnieje bliskie wywołanie API (4), które w rzeczywistości nie wywołuje prawdziwego bliskiego połączenia, a raczej umieszcza połączenie w puli (5) do późniejszego użycia. W pewnym momencie połączenia w puli mogą być faktycznie zamknięte (6).
To dość uproszczone wyjaśnienie. Prawdziwe implementacje mogą być w stanie obsłużyć połączenia z wieloma serwerami i wieloma kontami użytkowników, mogą wstępnie przydzielić pewną linię bazową połączeń, aby niektóre były gotowe od razu, i mogą faktycznie zamknąć stare połączenia, gdy wzorzec użycia się uspokoi.
Obrazy mówią więcej niż tysiąc słów (paxdiablo dał wspaniały opis):
Możesz użyć biblioteki Apache commons do implementacji puli połączeń w przejrzysty sposób: http://commons.apache.org/dbcp/
DBCP jest również obsługiwaną pulą Hibernacji: http://www.informit.com/articles/article.aspx?p=353736&seqNum=4
Koncepcja puli połączeń nie tylko w Javie, ale także w wielu językach programowania. Tworzenie nowego obiektu połączenia jest kosztowne, więc ustalona liczba połączeń jest tworzona i utrzymywana w cyklu życia, tworząc wirtualną pulę Java Just ( http://javajust.com/javaques.html ) patrz pytanie 14 na tej stronie