12

一般来说,我对 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 连接?

4

2 回答 2

11

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

干杯,德里克

于 2012-02-07T09:11:12.330 回答
3

您不需要调用 Connect 或 Disconnect

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

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

于 2014-05-06T14:32:51.527 回答