Що таке об'єднання баз даних?


Відповіді:


217

База даних підключення Пули є методом , використовуваним , щоб тримати з'єднання з базою даних відкрити таким чином вони можуть бути повторно використані іншими.

Зазвичай відкриття підключення до бази даних є дорогою операцією, особливо якщо база даних віддалена. Вам потрібно відкрити мережеві сеанси, пройти автентифікацію, перевірити авторизацію тощо. Об'єднання підтримує активні з'єднання, коли пізніше запит на з'єднання використовується один із активних, на відміну від необхідності створення іншого.

Подайте наступну схему для наступних кількох абзаців:

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

У своїй найпростішій формі це просто схожий виклик API (1) на виклик API відкритого з’єднання, подібний до "реального". Він спочатку перевіряє пул на відповідне з'єднання (2) і, якщо такий є, він надається клієнту. Інакше створюється новий (3).

"Підходяще з'єднання" - це лише те, що вже є доступ до бази даних, використовуючи правильну інформацію (наприклад, екземпляр бази даних, облікові дані та, можливо, інші речі).

Аналогічно, існує тісний виклик API (4), який насправді не викликає справжнє близьке з'єднання, а передає з'єднання в пул (5) для подальшого використання. У якийсь момент з'єднання в пулі можуть бути фактично закритими (6).

Це досить спрощене пояснення. Реальні реалізації можуть мати змогу обробляти з'єднання з декількома серверами та декількома обліковими записами користувачів, вони можуть попередньо виділити деяку базову лінію з'єднань, так що деякі будуть готові негайно, і вони можуть фактично закрити старі з'єднання, коли схема використання зменшується.


9
Звідки у вас хороший маленький графік?
Адріан Григоре

19
Я зробив це з нуля (нерозумно мене). Якщо ви хочете побачити пристойну графіку, подивіться на відповідь zengr.
paxdiablo

1
Якщо такий доступний, він надається клієнтові, інакше створюється новий. Аналогічно, існує тісний виклик API, який насправді не викликає справжнє тісне з'єднання, скоріше передає з'єднання в пул для подальшого використання. Як ваша згадка про це, у мене питання мало. Коли 1000 клієнтських запитів підключення не закрито. Тож 1000 підключень живе в басейні. Це добре для продуктивності басейну ?? І дайте мені знати, що моє розуміння мало помиляється ??
Ви виграєте

@YeWin, ні це не добре звучить. Поставте своє запитання щодо 1000 з'єднань, що залишилися в пулі, що може статися, але, як правило, тільки якщо ви в якийсь момент перебуваєте з 1000 одночасно активними з'єднаннями. В іншому випадку буде повторне використання, і воно не досягне 1000. З точки зору того, що відбувається, дивіться мій передостанній абзац, зокрема, біт "фактично може закрити старі з'єднання, коли шаблон використання зменшується".
paxdiablo

1
@DiegoMariani, повільніше, ніж якби я це робив вручну, швидше, ніж якщо б я намагався примусити MS Word зробити це простіше :-)
paxdiablo

105

Зображення говорять тисячу слів (paxdiablo дав приголомшливий опис):

alt текст

Джерело


35
І, мабуть, хороші образи говорять і про кілька сотень творів мистецтва ASCII :-)
paxdiablo

@sagar, будь ласка, оберіть відповідь, яку ви вважаєте найбільш корисною. У вас немає запису прийняття.
zengr

1
Я бачив 4 з'єднання в Pool.Тож номер з'єднання обмежений у цьому пулі шляхом об'єднання типу ?? Або що буде, коли з'єднання не буде безкоштовним у басейні? Клієнту потрібно чекати з'єднання безкоштовно ??
Ви виграєте

1
@DEADEND Це дійсно залежить від способу реалізації пулу з'єднань. Більшість пулів створюють нове з'єднання, коли з'єднання досягають максимальної потужності. Це може продовжувати зростати, доки db не досягне порогу. У деяких випадках (наприклад, oracle jdbc) ви можете вказати "початковий розмір" та "максимальний розмір" під час самої побудови басейну.
zengr

2
На жаль, зображення не говорить про найголовніше. Тобто: Чому збереження кількості відкритих підключень 10, 20, 30, ... є меншою витратою на пам'ять та загальну продуктивність системи, ніж відкриття одного з'єднання, коли потрібно? Як це може бути? 30 проти 1 - менш затратні? Як?
Зелений

16

Як випливає з назви. Якщо небагато людей хоче плавати, вони можуть плавати в одному басейні, чи справді є сенс будувати новий басейн кожного разу, коли хтось додає? Час і вартість - це пріоритет.


7

Пул з'єднання баз даних - це просто кешування підключень до баз даних, щоб їх можна було використовувати повторно, щоб зменшити витрати на встановлення нового з'єднання кожного разу, коли ми хочемо підключитися до бази даних.



1

Концепція об'єднання об'єднань не тільки на Java, але і на багатьох мовах програмування. Створення нового об'єкта підключення дорого, тому фіксовану кількість з'єднань здійснюють і підтримують у життєвому циклі, створюючи віртуальний пул Java Just ( http://javajust.com/javaques.html ) див. Питання 14 на цій сторінці

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.