Хранение соединений с базой данных в сеансе, в небольшом веб-приложении - PullRequest
2 голосов
/ 20 сентября 2009

У меня есть веб-приложение j2ee, которое используется для внутреннего использования ~ 20-30 человек.

Вероятность значительного роста числа пользователей отсутствует.

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

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

Ответы [ 3 ]

3 голосов
/ 20 сентября 2009

Из того, что я понял, есть компромисс между открытием новой БД подключение для каждого запроса к веб-приложение

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

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

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

Необходимо также учитывать побочный эффект от помещения в сеанс переходных атрибутов - объекты соединения не сериализуются и, следовательно, должны быть помечены как переходные. Если в какой-то момент сеанс десериализуется, необходимо учитывать тот факт, что объект Connection не будет доступен, и его необходимо повторно инициализировать.

1 голос
/ 20 сентября 2009

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

0 голосов
/ 20 сентября 2009

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

Если вы хотите сохранить открытые соединения, вам будет невероятно трудно управлять этим безопасным, безошибочным, безопасным и т. Д. Способом.

...