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

Managing MongoDB object lifetime in a web app

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

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

管理这些对象生命周期的最佳做法是什么?我可以将它们存储在每个服务器(应用程序域)的单例生活方式中,或者我可以根据请求继续创建它们。现在每个请求只有 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);
}

除了一些参数处理和几个分配之外,这里实际上没有做任何事情。真正昂贵的是连接池,并且(如您所提到的)它由驱动程序在内部处理。