![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
Нужно написать многопоточный сервер, который будет работать с базой данных. Делаю это первый раз, поэтому возник такой вопрос:
Как лучше организовать работу с БД? То есть можно сделать так, чтобы каждый поток рабтал с БД отдельно, то есть создавал бы свой отдельный коннект. А можно всю работу с БД повесить на отдельный класс, ссылка на единственный экземпляр которого будет передаваться каждому созданному потоку(тогда как я понимаю будет нужна синхронизация)? -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
ИМХО, но для каждого потока создавать свой коннект не правильно, как минимум потому, что будет брать очень много ресурсов. А вот создавать отдельный класс коннекта, это по-моему практикуется не только при написании многопоточных серверов.
Скорее всего, но не обязательно, все зависит от того что и как ты собираешься делать -------------------- менеджер по кодеврайтингу |
|||
|
||||
| y3u |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 9.9.2006 Где: Москва Репутация: нет Всего: 13 |
а какие исходные условия? почему бы не взять какой-нибудь уже готовый AS и написать бизнеслогику на тех же EJB 3.0... там не будет проблем с многопоточностью + будут все документированые фишки, в частности транзакции и т.д...
-------------------- В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 5 Всего: 132 |
Это сразу плохое решение. У тебя в результате будет огромное количество соединений, которые большую часть времени без действуют. При большой нагрузке, конечно. Берем готовый пул соединений, например, DBCP или C3P0, это решит сразу многие проблемы с соединениями с БД. |
|||
|
||||
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
Разбираться долго, к тому же это не такой серьезный проект. Тут именно надо написать САМОМУ. То есть как я понимаю все-таки делаем отдельный класс для работы с БД, делаем нужные методы synchronized и этого достаточно? -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 5 Всего: 132 |
||||
|
||||
| skhilkov |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
Вот такой класс:
Создать экземпляр этого класса и раздавать его всем потокам при создании. -------------------- Кто понял жизнь, тот не спешит. |
||||
|
|||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 5 Всего: 132 |
В общем я и предполагал, что будет одно соединение на всех. Значит так. Если это какое-то учебное приложение, которое никогда в реальной жизни использоваться не будет, то прокатит и так. Под нагрузкой у тебя здесь это единственное соединение с базой данных станет узким местом, тормозящим работу всего приложения. Если будет реальная эксплуатация, то нужен пул соединений. При необходимости могу очень простую реализацию подкинуть.
|
|||
|
||||
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
tux,
Я думаю что в моем случае так прокатит. Еще вопрос - правильно ли то, что я делал методы для работы с БД синхронизированными? И надо ли делать взаимное оповещение потоков(wait(), notify())? -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
| tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 5 Всего: 132 |
Думаю да. Хотя как скажется на соединении с базой данных работа в многопоточной среде с точностью сказать не смогу. Скорее всего отрицательно. Учитывай, что у тебя каждый метод должен быть полноценной транзакией - завершаться фиксацией или откатом и закрывать все созданные ресурсы за исключением самого соединения. |
|||
|
||||
| skhilkov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 371 Регистрация: 11.4.2006 Где: TOMSK Репутация: нет Всего: 7 |
tux,
спасибо большое! -------------------- Кто понял жизнь, тот не спешит. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |