Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что лучше, много Statement 1 Connection, или пул C, многопользовательский доступ к БД через 
:(
    Опции темы
UnicornMirage
Дата 23.2.2006, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: 1
Всего: 1



Здавсствуйте..
Сейчас решаю задачу: как лучше с точки зрения хорошего стиля программирования, производительности и т.п. реализовать многопользовательский доступ к БД через JDBC?

есть 2 варианта:
1) существует одно соединение (connection) с БД и для него создается один PreparedStatement в который посылаются запросы от разных пользователей

2) создавать соединение и PreparedStatement для каждого пользователя и помещать соединение в пул соединений

реализовал 2 варианта но пока не могу дать оценку, хочется услышать мнение экспертов.
PM MAIL   Вверх
Nobody
Дата 23.2.2006, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 25.8.2003
Где: Россия, Москва

Репутация: 4
Всего: 16



Я бы не парился до тех пор, пока это не станет самым узким местом в приложении.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
COVD
Дата 24.2.2006, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Я бы не парился до тех пор, пока это не станет самым узким местом в приложении.


Согласен. Можно и с одним соединением работать. А преимущества пула - это еще надо убедиться, что они есть, потому что зависит от многих факторов.
PM MAIL   Вверх
LSD
Дата 24.2.2006, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
carper
Дата 26.2.2006, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 2.3.2005

Репутация: 1
Всего: 8



В принципе, соединение на пользователя дает больше свободы в индивидуальной настройке параметров сессии для конкретного пользователя.
Также администратору базы гораздо проще разобраться с проблемами (да и завершить конкретную сессию), если соблюдается принцип 1 пользователь = 1 коннект.

Как тут уже писали, многое зависит от конретного приложения, в общих чертах, думаю, что правильнее будет для длительных сессий все же выбрать вариант с одним коннектом на одного пользователя (при необходимости можно задействовать MTS, либо готовые пулы соединений), а для разной шелупони по обслуживанию разовых web users можно использовать и один коннект (лучше опять же выделить небольшой пул).

Пул соединений лучше использовать готовый, нет смысла писать самому.

P.S. А вот Statement or PreparedStatement иметь один несколько странно - это что же получается, конкуренция за resultSet, как минимум?
Я бы не стал ограничивать ( в разумных пределах) их кол-во, лучше не забывайте их закрывать, причем отдельно! ResultSet и потом Statements (не верьте SUN, что достаточно просто закрыть Statement).
PM MAIL   Вверх
UnicornMirage
Дата 26.2.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: 1
Всего: 1



большое спасибо за ответы!
прочитал ваши сообщения, после чего - статью Connection Pool
и понял что шел по неверному пути, наступая на грабли.

еще пару вопросов:
Цитата

... (при необходимости можно задействовать MTS, либо готовые пулы соединений), а для разной шелупони по обслуживанию разовых web users можно использовать и один коннект (лучше опять же выделить небольшой пул).


-- что такое MTS? (в форуме по java не нашел такого ключевого слова)
-- готовые пулы соединений (я использую mysql-connector-java-3.1.10-bin.jar) - ссылку чтобы прочитать..

PM MAIL   Вверх
carper
Дата 26.2.2006, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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", что-то в этом роде и можно наваять самому, но думаю, что для серьезного использования там кое-чего не хватает (по-видимому, автор просто не стал перегружать статью деталями и подробностями, а то можно было залезть в порядочные дебри).
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0765 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.