我对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连接吗?
答案 0 :(得分:9)
我会保持连接打开,因为重新创建连接成本很高。 Mongo很好,有很多连接,打开很长时间。理想情况下,您应该与应用程序的所有部分共享连接作为持久连接。 C#驱动程序应该足够聪明,可以自行完成,因此它不会创建太多的连接,因为它内部使用“连接池”,甚至可以重用连接。文档说:“服务器的连接是在幕后自动处理的(连接池用于提高效率)。”
欢呼声, 德里克
答案 1 :(得分:3)
您无需呼叫连接或断开连接
C#驱动程序有一个连接池,可以有效地使用与服务器的连接。无需呼叫连接或断开连接;让驱动程序处理连接(调用Connect是无害的,但调用Disconnect是不好的,因为它会关闭连接池中的所有连接)。
http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver/