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

Cor*_*ndt 5 .net c# mongodb mongodb-.net-driver

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

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

  • IMongoClient
  • IMongoDatabase
  • IMongoCollection<T>

管理这些对象生命周期的最佳实践是什么?我可以在每个服务器(应用程序域)中使用单例生活方式存储它们,或者我可以根据请求继续创建它们。目前仅针对IMongoCollection<T>每个请求。

i3a*_*non 5

推荐的方法是持有一个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);
}
Run Code Online (Sandbox Code Playgroud)

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