MongoDb驱动程序2 - 单例实例恢复能力

时间:2017-05-16 08:58:01

标签: c# mongodb ssl mongodb-.net-driver mongodb-csharp-2.0

在连接弹性方面,有没有人有使用MongoDB C#驱动程序(v2 +)和单例样式连接/集合实例的经验?

问题

我们最近努力保护我们更广泛的基础架构,基本上在内部通过SSL运行所有内容。因此,我们最近获得了一个主要的MongoDb集群。最直接的差异之一是连接到群集的成本增加。我们的旧解决方案遵循典型的存储库模式,其中消息的订阅者将实例化存储库并且在处理该消息之后允许其成为GCd之前新建连接。由于切换到SSL,我们看到了消息处理性能的大幅下降 - 超出了我们的诚意预期!

问题

对于长期实例(周/月),是否建议使用IMongoClientIMongoDatabaseIMongoCollection<T>。它优雅地处理..

  1. 群集中的特定节点(但群集仍然可用)
  2. 整个群集脱机(例如主要网络中断)
  3. 设置更大的超时等是明智的,有什么影响?
  4. 我目前的理解是1.应该没有问题,因为2.它尝试在超时窗口内缓冲操作,并在群集再次可用时处理它们。 3.在很大程度上取决于操作的记忆和及时性(我们需要在内部思考)。

    如果群集的停机时间长于各种超时允许我假设抛出异常,那么我也假设我的实例会变得无用,除非我能告诉驱动程序重试连接到无限集群。对我来说,这似乎是文档和我自己的研究的灰色区域 - 任何人都可以提供更多的阅读材料或建议如何应对这种情况下的网络故障等?

    非常感谢,

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。您应该尝试尽可能地重复使用IMongoClient-理想情况下,它应该是单例。可以根据需要创建IMongoDatabaseIMongoCollection<T>。参见"Re-use" sections of the Mongo C# driver documentation

IMongoClient实现将维持与服务器的长期连接,并在网络出现故障时重新连接。