MySQL лучшее использование в Tomcat?

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

5
задан mabuzer 30 May 2010 в 07:38
поделиться

2 ответа

Импульс

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

Реализация

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

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

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

Библиотеки

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

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

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

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

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

  • DBCP - Менее творчески названный Apache DBCP (для "Database Connection Pooling") делает практически то же самое, что и c3p0. Это обсуждение, похоже, не рекомендует его использовать, утверждая, что c3p0 поддерживается более активно. Я не могу вспомнить, почему я выбрал c3p0 вместо DBCP для своего последнего проекта (вероятно, из-за знакомства), но если вы хотите взглянуть на DBCP, то вперед.

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

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

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

Недостатки

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

8
ответ дан 13 December 2019 в 22:02
поделиться

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

2
ответ дан 13 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: