Как создать пул соединений PostgreSQL с помощью Java? - PullRequest
15 голосов
/ 22 июня 2011

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

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

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

Ответы [ 3 ]

18 голосов
/ 22 июня 2011

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

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

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

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

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

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

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

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

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

1 голос
/ 22 июня 2011

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

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

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

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

0 голосов
/ 22 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...