【问题标题】:MongoDB connection methods c#MongoDB连接方法c#
【发布时间】:2021-09-25 11:30:58
【问题描述】:

我在我的 ASP.NET C# Web API 中使用 MongoDB。当我参考 MongoDB 文档时,我发现连接是自动打开和关闭的。

MongoClient 对象将是根对象。它是线程安全的,并且是 处理连接到服务器、监控所需的一切 服务器,并对这些服务器执行操作。 [...] 这是 建议将 MongoClient 实例存储在全局位置,或者 作为静态变量或在具有单例生命周期的 IoC 容器中。 但是,使用相同设置创建的多个 MongoClient 实例 将使用下面相同的连接池。

我真的不明白存储实例或在具有单例生命周期的 IOC 容器中是什么意思。

我可以得到任何解释如何做到这一点的参考吗?直接在我的 CRUD 操作中使用 new MongoClient() 是不是很糟糕。我必须真正管理这些连接吗?我是否必须在代码中处理某些内容才能在 MongoDB 中实现线程安全?

我问这个是因为我的写入和删除操作在多线程上以错误的顺序执行。

如果您需要更多代码,请随时询问。

【问题讨论】:

    标签: c# mongodb model-view-controller dependency-injection singleton


    【解决方案1】:

    只使用 new MongoClient() 是不是很糟糕

    不,这种方法没有任何问题,但它不再被认为是可取的。实际上,当您创建 MongoClient 时,内部客户端的逻辑会检查您之前是否已经创建了具有相同 MongoClientSettings 的 MongoClient,如果是,那么您将重用之前创建的客户端。所以实际上这个逻辑是单例的,但它是在 mongoClient 端实现的。但是这种方法也有一些缺点,请查看doc 了解详情。

    我必须真正管理这些连接吗?

    不,这是 MongoClient 的责任。

    我是否必须在代码中处理某些事情才能在 MongoDB 中实现线程安全?

    不,您不需要做任何事情,但是,尽管 MongoClient 中的某些底层功能是线程安全的,但并非 MongoClient 提供的所有功能都是线程安全的,例如会话不是线程安全的。

    【讨论】:

    • 感谢@dododo 的信息。又一个疑问。我可以通过 MongoClientSettings 将 MongoClient 的 Connection Limit 设置为 1 吗?使用的是什么设置?
    • 一旦你有不同的 MongoClientSettings (Connection Limit to one for the MongoClien),那么你将重新创建整个 MongoClient 机器,如连接池、内部线程等(意味着你不会重用以前创建的客户端)这是可能的,但不推荐。 what's the setting used - 用于限制可以创建的服务器连接数。一旦达到此限制,将不会创建新连接,而是会等待,直到先前创建的连接被释放
    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 2018-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2017-07-23
    相关资源
    最近更新 更多