![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: 1 Всего: 1 |
Здавсствуйте..
Сейчас решаю задачу: как лучше с точки зрения хорошего стиля программирования, производительности и т.п. реализовать многопользовательский доступ к БД через JDBC? есть 2 варианта: 1) существует одно соединение (connection) с БД и для него создается один PreparedStatement в который посылаются запросы от разных пользователей 2) создавать соединение и PreparedStatement для каждого пользователя и помещать соединение в пул соединений реализовал 2 варианта но пока не могу дать оценку, хочется услышать мнение экспертов. |
|||
|
||||
Nobody |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 25.8.2003 Где: Россия, Москва Репутация: 4 Всего: 16 |
Я бы не парился до тех пор, пока это не станет самым узким местом в приложении.
-------------------- |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Согласен. Можно и с одним соединением работать. А преимущества пула - это еще надо убедиться, что они есть, потому что зависит от многих факторов. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Все сильно зависит от частоты запросов, их характера и СУБД.
С одной стороны каждый дополнительный коннект к базе требует дополнительных ресурсов от сервера, с другой стороны если запрос нуждается в блокировках строк, то несколько сессий могут работать быстрее если они блокируют разные строки. И т.д., за и против хватает. Если для тебя этот вопрос важен, то напиши тестик и проверь на своей конкретной задаче. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
carper |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 1 Всего: 8 |
В принципе, соединение на пользователя дает больше свободы в индивидуальной настройке параметров сессии для конкретного пользователя.
Также администратору базы гораздо проще разобраться с проблемами (да и завершить конкретную сессию), если соблюдается принцип 1 пользователь = 1 коннект. Как тут уже писали, многое зависит от конретного приложения, в общих чертах, думаю, что правильнее будет для длительных сессий все же выбрать вариант с одним коннектом на одного пользователя (при необходимости можно задействовать MTS, либо готовые пулы соединений), а для разной шелупони по обслуживанию разовых web users можно использовать и один коннект (лучше опять же выделить небольшой пул). Пул соединений лучше использовать готовый, нет смысла писать самому. P.S. А вот Statement or PreparedStatement иметь один несколько странно - это что же получается, конкуренция за resultSet, как минимум? Я бы не стал ограничивать ( в разумных пределах) их кол-во, лучше не забывайте их закрывать, причем отдельно! ResultSet и потом Statements (не верьте SUN, что достаточно просто закрыть Statement). |
|||
|
||||
UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: 1 Всего: 1 |
большое спасибо за ответы!
прочитал ваши сообщения, после чего - статью Connection Pool и понял что шел по неверному пути, наступая на грабли. еще пару вопросов:
-- что такое MTS? (в форуме по java не нашел такого ключевого слова) -- готовые пулы соединений (я использую mysql-connector-java-3.1.10-bin.jar) - ссылку чтобы прочитать.. |
|||
|
||||
carper |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 1 Всего: 8 |
UnicornMirage
Sorry, я забыл уточнить. MTS (Multi-threaded Server) - это термин из Oracle, грубо говоря, он занимается как раз управлением пулом открытых соединений прозрачно для пользователей и не требует от разработчика выполнения не свойственных ему задач, т.к. IMHO управлять пулом соединений разумнее на стороне DBA. Готовые пулы, это просто коммерческие и freeware products, которые и реализуют пулы соединений. Например, commons-dbcp package from http://jakarta.apache.org/commons/dbcp/ or Excalibur from http:// excalibur.apache.org/. Впрочем, и самому написать проблема не больно велика, зависит только от глубины проработки и от того, что данные классы несут довольно серьезную ответственность за нормальную работу всех приложений, к ним обращающихся. P.S. Почитал статью "Connection Pool", что-то в этом роде и можно наваять самому, но думаю, что для серьезного использования там кое-чего не хватает (по-видимому, автор просто не стал перегружать статью деталями и подробностями, а то можно было залезть в порядочные дебри). |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |