Когда я должен открывать и закрывать подключения 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/