Что такое пул баз данных? - PullRequest
       11

Что такое пул баз данных?

94 голосов
/ 28 октября 2010

Я просто хотел узнать концепцию пула соединений с базой данных и как это достигается.

Ответы [ 6 ]

157 голосов
/ 28 октября 2010

База данных соединение объединение в пул - это метод, используемый для сохранения открытых соединений с базой данных, чтобы их могли использовать другие.

Как правило, открытие соединения с базой данных является дорогой операцией, особенно если база данныхудаленВы должны открыть сетевые сессии, пройти аутентификацию, проверить авторизацию и так далее.Объединение в пул поддерживает соединения активными, поэтому при последующем запросе соединения одно из активных используется для создания другого.

См. Следующую схему для следующих нескольких абзацев:

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

В простейшей форме это просто вызов API-вызова (1) с вызовом API открытого соединения, который похож на "настоящий" вызов.Сначала проверяется подходящее соединение для пула (2), и, если оно доступно, оно передается клиенту.В противном случае создается новый (3).

Аналогично, существует закрытый вызов API (4), который на самом деле не вызывает real close-connection, скорее он помещает соединение вбассейн (5) для последующего использования.В какой-то момент соединения в пуле могут быть на самом деле закрыты (6).

Это довольно упрощенное объяснение.Реальные реализации могут быть в состоянии обрабатывать соединения с несколькими серверами и несколькими учетными записями пользователей, они могут предварительно выделить некоторую базовую линию соединений, чтобы некоторые были готовы немедленно, и они могут фактически закрывать старые соединения, когда шаблон использования успокаивается.

76 голосов
/ 28 октября 2010

Изображения говорят тысячу слов (paxdiablo дал потрясающее описание):

alt text

Источник

3 голосов
/ 09 мая 2018

Как следует из названия. Если несколько человек хотят плавать, они могут плавать в одном и том же бассейне, имеет ли смысл строить новый бассейн каждый раз, когда кто-то добавляет? Время и стоимость - приоритет.

2 голосов
/ 07 ноября 2018

Буферизация соединения с базой данных - это просто кэширование соединений с базами данных, чтобы их можно было использовать повторно в следующий раз, чтобы снизить затраты на установление нового соединения каждый раз, когда мы хотим подключиться к базе данных

1 голос
/ 04 декабря 2016

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

1 голос
/ 28 октября 2010

Вы можете прозрачно использовать библиотеку apache commons для реализации пула соединений: http://commons.apache.org/dbcp/

DBCP также является поддерживаемым пулом Hibernate: http://www.informit.com/articles/article.aspx?p=353736&seqNum=4

...