Структура данных пула соединений с базой данных - PullRequest
5 голосов
/ 27 мая 2009

Я хотел бы разработать пул соединений с базой данных.

Может кто-нибудь сказать, какую структуру данных необходимо использовать для поддержки пула?

Ответы [ 7 ]

9 голосов
/ 27 мая 2009

Должно быть реализовано с использованием Шаблон дизайна пула объектов . Вы можете прочитать об этом в Кирхер, Майкл; Прашант Джайн; (2002-07-04). "Образец объединения". EuroPLoP 2002. Получено 2007-06-09. или Шаблон проектирования пула объектов . Реализацию Java для классов ObjectPool и JDBCConnectionPool можно найти здесь .

Пул объектов обычно представляет собой синглтон с двумя коллекциями объектов (например, подключений к базе данных) внутри:

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

Эта коллекция может быть реализована как Lists или HashTables или как-то еще, зависит от ваших потребностей. Для простого ObjectPool - LinkedList структура будет достаточно хорошей.

4 голосов
/ 27 мая 2009

Вместо разработки собственной, почему бы не использовать библиотеку типа Commons DBCP , которая широко используется и хорошо протестирована.

3 голосов
/ 27 мая 2009

Вам обычно нужно:

  • какая-то оболочка для «необработанных» объектов Соединения для управления такими вещами, как когда последнее соединение было установлено, диагностическая информация, возможно, кэш ваших подготовленных операторов для этого соединения и т. Д.
  • коллекция для размещения оболочек соединений, поддерживающая одновременные добавления / удаления - подойдет любой правильно синхронизированный список, но разумным выбором будет ConcurrentLinkedQueue
  • способ управления выделениями из пула - рассмотрите возможность использования Семафор класс
  • возможно, объединение различных пулов в некоторый "класс управления пулами" (например, так что вы можете просто вызвать "getConnection (databaseName, readOnly)" и он перейдет в соответствующий пул)

Кроме того, вы можете создать все необходимое для ведения журнала / мониторинга.

Есть также сторонники готовых платформ соединений пула. Я знаю, что есть те, кто не согласен, но я лично не пошел бы по этому пути - пул соединений (а) действительно не сложно написать, (б) образует ключевую часть вашей системы, которую вы, вероятно, должны понимать и настроить.

3 голосов
/ 27 мая 2009
0 голосов
/ 27 мая 2009

Не уверен, что разумно создавать свой собственный.

Я использовал c3p0 пул соединений (с Hibernate ) во многих проектах с большим успехом

0 голосов
/ 27 мая 2009

См. Это руководство разработчика Sun: Пул подключений :

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

0 голосов
/ 27 мая 2009

Является ли решение с открытым исходным кодом тем, что вы ищете?

См. API пула соединений с базой данных Apache

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