Пул соединений: это уместно - PullRequest
1 голос
/ 02 мая 2011

Я создаю веб-приложение на основе Java (в основном JSP, развернутые с Tomcat). Количество пользователей никогда не будет более ~ 30 человек. Это рабочий журнал, поэтому пользователи будут постоянно обновлять / получать доступ к базе данных (SQL Server). В веб-приложении есть много методов, которые требуют подключения к базе данных.

Я открываю новое соединение каждый раз, когда требуется (я также закрываю его соответствующим образом), но это похоже на много открытий / закрытий соединений. Относится ли пул соединений к этой ситуации? Я пытаюсь понять роль бассейна, но я в замешательстве; будет ли пул соединений для каждого пользователя?

Если я не в курсе (у меня есть подозрения), то есть ли лучшее решение этой проблемы? Есть ли проблема?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 02 мая 2011

Пул соединений для приложения (не для пользователя). Концепция пула соединений состоит в том, чтобы максимально использовать открытые соединения и открывать новые, когда это абсолютно необходимо. Открытие соединения с базой данных - дорогостоящая операция с точки зрения как циклов процессора, так и памяти. Вот почему нужен пул соединений. Для 30 пользователей я бы рекомендовал использовать пул подключений.

Размер пула можно варьировать от 15 до 30 соединений в пуле.

взгляните на http://commons.apache.org/dbcp/

2 голосов
/ 02 мая 2011

Да, я бы определил размер пула на 30 соединений и позволил ему управлять ими.Таким образом вы амортизируете стоимость открытия соединений по всем запросам.

Существует один пул, к которому многие пользователи будут иметь доступ для получения соединений;одно соединение на запрос.

1 голос
/ 02 мая 2011

Дело здесь не столько в количестве пользователей, сколько в количестве запросов, требующих открытия соединения.

Если у вас есть

 for (int i = 0; i < 1000 ; i ++ ) { 
       Connection c = getConnection();
       dosomwthingWith(c);
       c.close();
 }

Вы по-прежнему получите выгоду от пула соединений, поскольку c.close() на самом деле не закрывает соединение, а просто помещает его обратно в пул.

1 голос
/ 02 мая 2011

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

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

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

...