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

时间:2012-02-07 07:16:58

标签: mongodb database-connection mongodb-.net-driver scoping norm

我对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); 
       }
   }

另一个跟进问题是:

通过Norm“昂贵”的操作来打开和关闭MongoDB连接吗?

2 个答案:

答案 0 :(得分:9)

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

欢呼声, 德里克

答案 1 :(得分:3)

您无需呼叫连接或断开连接

C#驱动程序有一个连接池,可以有效地使用与服务器的连接。无需呼叫连接或断开连接;让驱动程序处理连接(调用Connect是无害的,但调用Disconnect是不好的,因为它会关闭连接池中的所有连接)。

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