在连接弹性方面,是否有人有使用过MongoDB C#驱动程序(v2 +)和单例样式连接/集合实例的经验?
问题
我们最近已努力确保我们更广泛的基础架构的安全,基本上甚至在内部都通过SSL运行一切。因此,我们最近保护了我们的主要MongoDb集群之一。最直接的差异之一是连接集群的成本增加。我们的旧解决方案遵循典型的存储库模式,即消息的订阅者将实例化存储库,并在处理该消息后允许对其进行GCd之前建立连接。切换到SSL后,消息处理性能出现了相当大的下降-超出了我们的诚实预期!
问题
关于长寿命实例(周/月),是否存在与IMongoClient
,IMongoDatabase
,IMongoCollection<T>
结合使用的推荐方法。是否可以正常处理。]
我目前的理解是,1.应该没问题,因为2.它试图在超时窗口内缓冲操作,并在群集再次可用后对其进行处理。 3.在很大程度上取决于操作的内存和及时性(我们需要在内部进行考虑)。
如果集群关闭的时间长于各种超时所允许的时间,则我假设抛出异常,在那一刻,我还假设我的实例将变得无用,除非我可以告诉驱动程序重试连接到集群无限期地对我来说,这似乎是文档和我自己研究的灰色领域-任何人都可以提供更多阅读材料或建议来解决这种情况下的网络故障等方法吗?
非常感谢,
回答我自己的问题。您应该尝试重用IMongoClient
-理想情况下,它应该是单例。可以根据需要创建IMongoDatabase
和IMongoCollection<T>
。参见"Re-use" sections of the Mongo C# driver documentation。
IMongoClient实现将维持与服务器的长期连接,并在网络出现故障时重新连接。