Я использую таблицы в двух случаях:
1) Табличные данные
2) Любое время я хочу, чтобы мое расположение динамично измерило себя к своему содержанию
На вступительной странице Apache DBCP все хорошо резюмируется:
Создание нового соединения для каждого пользователь может занимать много времени (часто требуется несколько секунд часов время), чтобы создать базу данных сделка, которая может принять миллисекунды. Открытие соединения на пользователь может быть неосуществимым в общедоступное Интернет-приложение где количество одновременных пользователей может быть очень большим. Соответственно, разработчики часто хотят поделиться «пул» открытых связей между всеми текущих пользователей приложения. Фактическое количество пользователей выполнение запроса в любой момент времени обычно очень небольшой процент общее количество активных пользователей, и во время обработки запроса - единственный время, когда соединение с базой данных обязательный. Само приложение логирует в СУБД и обрабатывает любого пользователя проблемы с аккаунтом внутри.
Насколько они эффективны? Зависит от реализации. Обычно я ожидаю, что пул будет создавать экземпляры соединений при запуске или по запросу. Первое соединение потребует реального соединения с базой данных, а после этого, когда вы запрашиваете соединение, вам предоставляется существующее объединенное соединение. Таким образом, первый запрос на подключение займет больше всего времени, а потом вы просто извлекаете объекты из коллекции (очень быстро).
Ваш вопрос немного двусмысленен:
Do вы хотите вырастить пул соединений? Если так, то это хорошая отправная точка: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/conpool.html Но это крайне не рекомендуется для производственной среды. Лучше использовать существующий и тщательно протестированный API пула соединений, например DBCP или C3P0 .
Или вы хотите узнать, как использовать пул соединений? Если да, то ответ зависит от API пула соединений, который вы используете. К счастью, он обычно доступен на веб-сайте соответствующего API.
Или вы хотите знать , когда / зачем использовать пул соединений? Если это так, это наверняка повысит производительность подключения, если у вас есть долгоживущее приложение (например, веб-приложение), и вам нужно подключать базу данных чаще, чем часто. Обычная практика JDBC: получить и закрыть Connection
, Statement
и ResultSet
в самом коротком возможном область видимости (т.е. внутри того же самого блока метода). Поскольку подключение довольно дорогое и может занять до 200 мс или даже больше, использование пула подключений происходит намного быстрее. Он предоставляет соединения по запросу и заботится о фактическом закрытии соединения. Однако это не означает, что вы можете изменить способ написания JDBC, вам по-прежнему необходимо приобрести и закрыть их в максимально возможной степени. Единственное, что вам нужно изменить, - это способ установления связи. Например, изменение с
connection = driverManager.getConnection();
на
connection = connectionPool.getConnection();
Больше никаких изменений не требуется, если ваш код JDBC хорошо написан.
Создание подключений к базам данных - очень дорогостоящая операция. Пулы соединений - это экземпляры соединений с базой данных, которые создаются и кэшируются. Каждый раз, когда требуется новое соединение с базой данных, вместо создания нового соединения используется соединение из пула. Некоторые платформы, такие как .NET + SQL Server, по умолчанию используют пулы соединений (вам не нужно создавать свои собственные). Таким образом, они в основном повышают производительность, экономя время на создание новых подключений каждый раз.
Используя пул подключений, вы экономите время каждый доступ, потому что соединение уже установлено.
Более того, по крайней мере в Oracle, вы сохраняете скомпилированный оператор, связанный с подключением, поэтому повторное выполнение одного и того же оператора SQL выполняется еще быстрее.
(см. PreparedStatement, если вы используете Java / JDBC)
Единственный риск снижения производительности заключается в том, что когда вы держите слишком много неактивных соединений в пуле, связанные ресурсы (ваша сторона и база данных) тратятся впустую.
Создание соединения с базой данных может оказаться или не оказаться дорогостоящей операцией, в зависимости от вашей среды и того, что вы собираетесь с ней делать.
Если вы собираетесь запускать один, очень просто запрос, то подключение, вероятно, занимает столько же (или дольше), чем запрос.
Некоторые базы данных имеют гораздо большие накладные расходы на подключение, чем другие; если настроен правильно, mysql должен иметь очень мало (сверх времени, чтобы установить TCP-соединение и выполнить квитирование протокола). Однако, если задержка для вашего сервера очень велика, даже это может быть весьма значительным (особенно, если вы собираетесь выполнить только несколько запросов).
Если вы планируете выполнить, скажем, 100 запросов или несколько действительно медленные запросы, то время соединения теряет значение.
Обычно я ' Я каждый раз предлагаю открывать новое соединение, пока вы не продемонстрируете, что это реальная проблема с производительностью. Использование пула соединений может привести к ОШИБКАМ, которые нам не нравятся:
Взгляните на BoneCP ( http://jolbox.com ) в разделе тестов для получения некоторых значений. Помните, что подготовленные операторы и т. Д. Привязаны к соединению, поэтому вам нужно будет готовить их снова и снова, если вы сами имеете дело с соединениями (пул соединений будет кэшировать их и для вас).
Мое лучшее решение: использовать lazyDataSource, который дает вам соединение только тогда, когда оно вам действительно нужно (т.е. не вслепую - если данные могут поступать из кеша, вы можете избежать попадания в базу данных)