我什么时候应该打开和关闭MongoDB连接?

Kim*_*mpo 11 database-connection scoping mongodb norm mongodb-.net-driver

我对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();
}
Run Code Online (Sandbox Code Playgroud)

如果我在控制器中做其他事情,我有点担心它可能会持续打开太长时间.

这种方法是否应该不会冒太多连接的风险,或者我应该做更像下面的示例方法?

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

另一个跟进问题是:

通过Norm"昂贵"操作打开和关闭MongoDB连接?

Der*_*ick 9

我会保持连接打开,因为重新创建连接是昂贵的.Mongo很好,有很多连接,打开很长时间.理想情况下,您应该与应用程序的所有部分共享连接作为持久连接.C#驱动程序应该足够聪明,可以自行完成,因此它不会创建太多的连接,因为它内部使用"连接池",甚至可以重用连接.文档说:"服务器的连接是在幕后自动处理的(连接池用于提高效率)."

欢呼,德里克

  • 同意.实际上,您甚至不需要编写MongoSession类 - 在应用程序范围内存储MongoServer实例是合适的.当MVC应用程序关闭时,您几乎肯定会在此实例上调用Disconnect()一次. (2认同)