сохраняя одно соединение с БД или открывая закрытие по необходимости - PullRequest
3 голосов
/ 01 июня 2011

Я ищу лучшую практику в следующем случае, с причинами, почему каждый из способов лучше.

У меня есть одна БД с примерно 10 ~ 20 клиентскими приложениями, которые подключаются к одному основному серверу БД.

В очень редких случаях может быть около 200 вызовов от одного клиента к БД в минуту.

Приложение является многопоточным, около 20 потоков на приложение.

В этом случае рекомендуется использовать только одно соединение с БД для каждого приложения и повторно использовать его для каждого приложения. ИЛИ открывая новые соединения для каждого необходимого звонка и быстро закрывая их.

Мы работаем с oracle и sql-сервером.

Ответы [ 3 ]

3 голосов
/ 01 июня 2011

. Поставщик оракула .NET имеет встроенные возможности пула соединений.Всякий раз, когда вам нужно соединение с БД, создайте новое и сделайте это немедленно.Пул соединений позаботится о повторном использовании соединений.

Лучший способ освободить соединение - это конструкция using, которая обеспечит удаление соединения, даже если возникнут исключения.

using(OracleConnection connection = ConnectionFactory.Create())
{
    connection.DoStuff();

} //connection.Dispose() called here.
1 голос
/ 01 июня 2011

Лучшая практика - избавиться от связи как можно скорее.Технически соединение не будет закрыто, оно будет просто возвращено в пул и будет использовано другими потоками.

Пул соединений с сервером SQL (ADO.NET)

Цитата из MSDN:

Мы настоятельно рекомендуем всегда закрывать соединение по окончании его использования, чтобы соединение было возвращено в пул.Это можно сделать с помощью методов Close или Dispose объекта Connection или открыв все соединения внутри оператора using.

0 голосов
/ 01 июня 2011

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

Может ли ваша база данных справиться с 20 клиентами, каждый из которых делает 200 вызовов в минуту?Будут ли отдельные потоки выполнять параллельные обращения к базе данных?

Я бы склонялся к тому, чтобы у каждого клиента был свой пул соединений.

Есть ли клиенты, которые важнее других?Если это так, то вам может потребоваться один клиент с 20 подключениями, а другой - с 10.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...