Когда я должен открывать и закрывать подключения MongoDB? - PullRequest
11 голосов
/ 07 февраля 2012

Я очень новичок в MongoDB и NoSQL в целом, и я только начал создавать сайт с MongoDB / Norm / ASP.NET MVC 3.

Мне интересно, как я должен определять границы соединений с моей базой данных Mongo.

Прямо сейчас у меня есть Basecontroller, который создает экземпляр MongoSession, и onActionExecuted. Я распоряжаюсь им, чтобы все мои производные контроллеры имели доступ к моей MongoSession. Класс MongoSession открывает соединение в своем конструкторе и размещает его в Dispose (), как он работает сегодня.

private IMongo _mongo;

public MongoSession()
{         
    _mongo = Mongo.Create("connString");      
} 

public void Dispose()
{
    _mongo.Dispose();
}

Я немного обеспокоен тем, что соединения могут оставаться открытыми слишком долго, если я выполняю другие операции в контроллерах.

Достаточно ли этого подхода, чтобы не рисковать держать слишком много открытых соединений, или я должен делать что-то более похожее на приведенный ниже пример метода?

   public void Add<T>(T item) where T : class, new()
   {
       using (var mongo = Mongo.Create("connString"))
       {
         mongo.GetCollection<T>().Insert(item); 
       }
   }

Еще один вопрос:

Являются ли открытие и закрытие соединений MongoDB через Norm "дорогими" операциями?

Ответы [ 2 ]

9 голосов
/ 07 февраля 2012

Я бы оставил соединение открытым, поскольку повторное создание соединения обходится дорого. Монго хорошо с большим количеством соединений, открытых в течение длительного времени. В идеале вам следует делиться соединением со всеми частями вашего приложения как постоянным соединением. Драйвер C # должен быть достаточно умен, чтобы делать это самому, чтобы он не создавал слишком много соединений, поскольку внутренне он использует «пул соединений», что делает его даже повторно используемым. В документах говорится: «Соединения с сервером обрабатываются автоматически за кулисами (пул соединений используется для повышения эффективности)».

ура, Дерик

3 голосов
/ 06 мая 2014

Вам НЕ нужно вызывать Connect или Disconnect

Драйвер C # имеет пул соединений для эффективного использования соединений с сервером.Нет необходимости звонить Connect или Disconnect;просто позвольте драйверу позаботиться о соединениях (вызов Connect безопасен, но вызов Disconnect плох, потому что он закрывает все соединения в пуле соединений).

http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/

...