Я просто хотел узнать концепцию пула соединений с базой данных и как это достигается.
Я просто хотел узнать концепцию пула соединений с базой данных и как это достигается.
Пул соединений с базой данных - это метод, используемый для того, чтобы соединения с базой данных оставались открытыми, чтобы их могли повторно использовать другие.
Обычно открытие соединения с базой данных - дорогостоящая операция, особенно если база данных удаленная. Вы должны открыть сетевые сеансы, пройти аутентификацию, проверить авторизацию и т. Д. При объединении в пул соединения остаются активными, так что при последующем запросе соединения одно из активных используется вместо создания другого.
Следующие несколько абзацев см. На следующей схеме:
+---------+
| |
| Clients |
+---------+ |
| |-+ (1) +------+ (3) +----------+
| Clients | ===#===> | Open | =======> | RealOpen |
| | | +------+ +----------+
+---------+ | ^
| | (2)
| /------\
| | Pool |
| \------/
(4) | ^
| | (5)
| +-------+ (6) +-----------+
#===> | Close | ======> | RealClose |
+-------+ +-----------+
В простейшей форме это просто вызов API (1), аналогичный вызову API открытого соединения, который похож на «настоящий». Сначала выполняется проверка пула на наличие подходящего соединения (2), и, если оно доступно, оно передается клиенту. В противном случае создается новый (3).
«Подходящее соединение» - это просто такое соединение, которое уже имеет доступ к базе данных с использованием правильной информации (такой как экземпляр базы данных, учетные данные и, возможно, другие вещи).
Точно так же есть вызов API закрытия (4), который на самом деле не вызывает реального закрытия соединения, а помещает соединение в пул (5) для дальнейшего использования. В какой-то момент соединения в пуле могут быть фактически закрыты (6).
Это довольно упрощенное объяснение. Реальные реализации могут иметь возможность обрабатывать подключения к нескольким серверам и нескольким учетным записям пользователей, они могут предварительно выделить некоторые базовые соединения, чтобы некоторые были готовы немедленно, и они могут фактически закрыть старые соединения, когда шаблон использования стихнет.
Изображения говорят тысячу слов (паксдиабло дал потрясающее описание):
Источник
источник
Как следует из названия. Если несколько человек хотят плавать, они могут плавать в одном бассейне, действительно ли имеет смысл строить новый бассейн каждый раз, когда кто-то добавляет? Время и стоимость - приоритет.
источник
Пул соединений с базами данных - это просто кэширование соединений с базами данных, чтобы их можно было повторно использовать в следующий раз, чтобы снизить затраты на установление нового соединения каждый раз, когда мы хотим подключиться к базе данных.
источник
Вы можете прозрачно использовать библиотеку apache commons для реализации пула соединений: http://commons.apache.org/dbcp/
DBCP также является поддерживаемым пулом Hibernate: http://www.informit.com/articles/article.aspx?p=353736&seqNum=4
источник
Концепция пула соединений не только в Java, но и во многих языках программирования. Создание нового объекта подключения является дорогостоящим, поэтому фиксированное количество подключений создается и поддерживается в жизненном цикле создания виртуального пула Java Just ( http://javajust.com/javaques.html ) см. Вопрос 14 на этой странице
источник