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

Iri*_*ist 8 c# ssl mongodb mongodb-csharp-2.0 mongodb-.net-driver

有没有人有任何使用MongoDB C#Driver(v2 +)与连接弹性方面的单一样式连接/集合实例的经验?

问题

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

问题

有没有一起工作建议的方式IMongoClient,IMongoDatabase,IMongoCollection<T>相对于长寿命的实例(周/月).它优雅地处理..

  1. 群集中的特定节点(但群集仍然可用)
  2. 整个群集脱机(例如主要网络中断)
  3. 设置更大的超时等是明智的,有什么影响?

我目前的理解是1.应该没有问题,因为2.它试图在超时窗口内缓冲操作并在集群再次可用时处理它们.3.在很大程度上取决于操作的记忆和及时性(我们需要在内部思考).

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

提前谢谢了,

Iri*_*ist 0

回答我自己的问题。IMongoClient您应该尽可能尝试并重用- 理想情况下,它应该是单例。IMongoDatabase并且IMongoCollection<T>可以根据需要创建。请参阅Mongo C# 驱动程序文档的“重用”部分。

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