C# 在web应用程序中管理MongoDB对象生存期
我有一个使用mongodb作为底层存储的RESTful后端。我用的是c#driver。文档说明mongo自行管理其连接池 问题是:要与mongodb通信,我需要以下实现的实例C# 在web应用程序中管理MongoDB对象生存期,c#,.net,mongodb,mongodb-.net-driver,C#,.net,Mongodb,Mongodb .net Driver,我有一个使用mongodb作为底层存储的RESTful后端。我用的是c#driver。文档说明mongo自行管理其连接池 问题是:要与mongodb通信,我需要以下实现的实例 IMongoClient IMongoDatabase IMongoCollection 管理这些对象的生命周期的最佳实践是什么?我可以使用每台服务器的singleton lifestyle(appdomain)存储它们,也可以根据请求不断创建它们。目前,每个请求仅提供IMongoCollection。建议的方法是保存
IMongoClient
IMongoDatabase
IMongoCollection
管理这些对象的生命周期的最佳实践是什么?我可以使用每台服务器的singleton lifestyle(appdomain)存储它们,也可以根据请求不断创建它们。目前,每个请求仅提供
IMongoCollection
。建议的方法是保存单个MongoClient
实例,并在需要时使用它获取数据库和集合
如果这些实例对您的性能至关重要,您可能会主动缓存这些实例,但在大多数情况下,这是不必要的,因为所有这些类型都非常简单,创建成本也很低。例如,这是GetCollection
方法:
public override IMongoCollection<TDocument> GetCollection<TDocument>(string name, MongoCollectionSettings settings)
{
Ensure.IsNotNullOrEmpty(name, "name");
settings = settings == null ?
new MongoCollectionSettings() :
settings.Clone();
settings.ApplyDefaultValues(_settings);
return new MongoCollectionImpl<TDocument>(this, new CollectionNamespace(_databaseNamespace, name), settings, _cluster, _operationExecutor);
}
public覆盖IMongoCollection GetCollection(字符串名称,MongoCollectionSettings)
{
确保.IsNotNullOrEmpty(name,“name”);
设置=设置=空?
新建MongoCollectionSettings():
settings.Clone();
设置。ApplyDefaultValue(_设置);
返回新的MongoCollectionImpl(这是新的CollectionNamespace(_databaseNamespace,name)、设置、_群集、_operationExecutor);
}
除了一些参数处理和一些分配,这里实际上什么都没有做。真正昂贵的是连接池,而且(正如您所提到的)它是由驱动程序内部处理的