Как создать пул соединений PostgreSQL с помощью Java?

Я пытаюсь использовать пул соединений, но я не понимаю его правильно. Кто его реализует? Программное обеспечение, драйвер или база данных?

Как я делаю, чтобы моя программа работала с помощью пула соединений? Я использую собственный драйвер PostgreSQL.

Мне нужен пример кода. Я занимаюсь веб-браузером, и у него много соединений с базой данных.

Ответы

Ответ 1

Существует несколько возможностей:

  • контейнер сервера приложений/сервлета может предоставить вам пул соединений, см., например, Tomcat 7 JNDI Datasource для PostgresQL.

  • Вы можете создать пул соединений вручную, используя библиотеки с открытым исходным кодом, такие как DBCP или C3P0.

  • Наконец, ваш драйвер JDBC базы данных может предоставить некоторую встроенную реализацию пула подключений, см. Пулы соединений и источников данных PostgresQL и PGConnectionPoolDataSource (я не знаю, как последние и современные эти классы).

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

Объединение имеет много преимуществ:

  • нет накладных расходов на соединение TCP/IP, авторизацию и т.д. - это делается только один раз.

  • пул позаботится о сломанных соединениях, он также может проверить соединение, прежде чем передать его вам

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

Ответ 2

Собственный пул выполняется с помощью кода, который находится между кодом приложения и драйвером базы данных.

Кто там ставит этот код? Может быть кто угодно. Это может быть вы - есть библиотеки, такие как DBCP, которые ваш код может использовать для размещения пула поверх базы данных. Это может быть контейнер J2EE, такой как Tomcat или JBoss. Это может быть даже база данных, как указывает Томаш, PostgreSQL поставляется с кодом объединения.

Похоже, вы не используете контейнер J2EE, и в этом случае это зависит от вас или базы данных. Лично я бы предпочел выделенную реализацию объединения, такую ​​как DBCP, по сравнению с базой данных. Программисты базы данных больше всего заботятся о базе данных; программисты пула больше всего заботятся о пуле.

Итак, получите DBCP (IMHO, это лучше, чем альтернативы) и используйте это.

Ответ 3

Я думаю, что вы ищете пул соединений, выполненный на стороне клиента, который делает соединение с базой данных. Основная идея заключается в том, что установление нового соединения является дорогостоящим, поскольку оно включает настройку соединения, настройку боковых объектов БД, аутентификацию и т.д. И, следовательно, повторное использование объектов соединения.