Когда я должен открывать и закрывать подключения MongoDB?

Я очень новичок в 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 ответа

Решение

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

ура, Дерик

Вам НЕ нужно звонить, подключиться или отключиться

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

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

Другие вопросы по тегам