在 Web 应用程序中管理 MongoDB 对象生存期



我有一个使用 mongodb 作为底层存储的 RESTful 后端。我正在使用 c# 驱动程序。文档指出 mongo 自行管理其连接池。

问题是:要与mongodb通信,我需要以下实现的实例

  • IMongoClient
  • IMongoDatabase
  • IMongoCollection<T>

管理这些对象的生存期的最佳做法是什么?我可以按服务器(appdomain)以单例生活方式存储它们,也可以继续根据请求创建它们。目前每个请求只有IMongoCollection<T>

建议的方法是保存单个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);
}

除了一些参数处理和一些分配之外,这里实际上什么也没做。实际上昂贵的是连接池,并且(如您所提到的)它由驱动程序在内部处理。

最新更新