Почему нам нужен пул соединений для JDBC?

  • В чем преимущества использования инструмента объединения пула JDBC, такого как DBCP или c3p0?

  • в случае приложения small CRUD с одним пользователем, мы можем просто создать сеанс связи один как singleton?

PS: я создаю небольшое приложение javafx, завершенное крошечной базой h2 (5 таблицы).

Ответ 1

От Jon Skeet ответьте на В чем преимущество объединения соединений и сообщений?:

Создание сетевого подключения к серверу базы данных (относительно) дорогая. Аналогично, попросив сервер подготовить инструкцию SQL, (относительно) дорого.

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

И следующее из ответ Kent Boogaart:

Я не знаком с c3p0, но преимущества объединения соединений и заявления включают:

  • Производительность

    . Подключение к базе данных дорого и медленно. Объединенные соединения могут быть физически подключены к базе данных, и разделяют между различными компонентами, которым необходим доступ к базе данных. Таким образом, стоимость подключения оплачивается один раз и амортизируется по всем потребляющие компоненты.

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

  • ремонтопригодность

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

Ответ 2

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