我有一个使用mongodb作为底层存储的RESTful后端。我正在使用c#驱动程序。文档说明mongo自己管理其连接池。
问题是:与mongodb通信我需要以下实现的实例
IMongoClient
IMongoDatabase
IMongoCollection<T>
管理这些对象生命周期的最佳做法是什么?我可以为每个服务器(appdomain)存储单身生活方式,或者我可以根据请求继续创建它们。目前,每个请求只有IMongoCollection<T>
。
答案 0 :(得分:3)
建议的方法是保存一个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);
}
除了一些参数处理和一些分配之外,这里真的没有做任何事情。实际上很昂贵的是连接池和(如你所提到的)内部驱动程序处理它。