Лучшее использование MySQL в Tomcat? - PullRequest
5 голосов
/ 30 мая 2010

Какой из способов лучше использовать MySQL в Tomcat:
A) назначить соединение с БД для пользователя, если сеанс действителен. [ИЛИ ЖЕ]
B) открывать соединение с БД, при каждом запросе приходить на сервер и когда это делается, закрывать.
C) Пул соединений. [ЛУЧШИЙ ответ]

Ответы [ 2 ]

8 голосов
/ 30 мая 2010

Стимул

В любой системе запросов-ответов - будь то http, ftp или вызов базы данных - имеет смысл держать пул соединений открытым для использования клиентом. Затраты на создание и разрыв соединения во время каждого отдельного запроса высоки (как для клиента, так и для сервера), поэтому наличие пула, из которого несколько потоков могут «проверять» соединение для их использования, является хорошим примером.

Осуществление

JDBC API предоставляет оболочку для любого количества реализаций базы данных, что означает, что вызывающие абоненты могут (в основном) не зависеть от того, какую базу данных они вызывают. Эта абстракция позволила кодировщикам создавать универсальные библиотеки, которые обеспечивают пул соединений для любого типа соединения JDBC.

Вот страница Sun о пуле соединений, а вот одна из MySQL.

Поскольку вызывающий объект, предположительно, использует только методы JDBC, checkout может выглядеть как запрос на создание соединения, а checkin - просто вызывающий, закрывающий соединение, то есть вызывающий не знает, что он использует соединение. объединение в пул, потому что семантика неотличима от использования единого решения создания / разрыва соединения. Это хорошая вещь; это настоящий ОО.

Библиотека

Итак, какие библиотеки доступны, чтобы сделать это проще?

  • c3p0 - Эта библиотека, названная в честь любимого всем протокольного дроида, обеспечивает пул соединений и подготовленный пул операторов (я считаю, что это пул объектов PreparedStatement объектов) .

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

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

    Похоже, у них есть приложение специально для настройки c3p0 для использования Tomcat, так что вы можете проверить это.

  • DBCP - Менее креативно названный Apache DBCP (для «Пул соединений с базами данных») выполняет почти те же функции, что и c3p0. Это обсуждение , по-видимому, препятствует его использованию, утверждая, что c3p0 поддерживается более активно. Я не могу вспомнить, почему я выбрал c3p0 вместо DBCP для моего последнего проекта (вероятно, знакомство), но если вы хотите взглянуть на DBCP, продолжайте.

    Вот несколько вопросов о переполнении стека о DBCP:

    Я ненавижу быть негативной Нэнси, но я не думаю, что DBCP - это то, что вы хотите.

  • BoneCP - Возможно, с креативным названием, но звучит немного странно. Я никогда не использовал это. Автор говорит, что это очень быстро , и он может быть прав. Это кажется наименее зрелым - хотя бы временно - из всех ваших вариантов, но вы должны попробовать и посмотреть, отвечает ли он вашим потребностям.

Недостатки

Вы помещаете ваш DataSource в некоторый прокси-подобный другой класс, поэтому методы, специфичные для поставщика, скорее всего, будут недоступны. Это не имеет большого значения: вы все равно не должны писать код БД для конкретного поставщика.

2 голосов
/ 30 мая 2010

B) или В) использовать пул соединений

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