【问题标题】:Which node is one connected to in c# mongo driver when using replica set使用副本集时在c#mongo驱动程序中连接到哪个节点
【发布时间】:2013-04-24 17:23:28
【问题描述】:

我有一个连接字符串设置如下:

mongodb://54.225.?.?,54.214.?.?, 54.214.?.?/rs0?connect=replicaset;replicaSet=rs0;slaveOk=true;readPreference=nearest

我已将 readPreference 设置为最近。在测试和生产过程中,有时我们想保证并检查我们是否正在与离客户端最近的某些节点进行通信。我知道这是自动处理的,但是我可以通过驱动程序使用什么方法来找出我连接到特定数据库调用的实际副本集成员。

例如,我有三个数据中心,我希望我们的应用程序使用离它最近的一个,但我想确保我们正在连接到它,因为应用程序需要最高性能并减少延迟。

【问题讨论】:

标签: c# mongodb driver


【解决方案1】:

您没有连接到单个服务器 - 您连接到整个副本集。因此,由于驱动程序保持对集合中所有成员的连接打开,它知道向主节点发送写入,并且知道何时可以向辅助节点发送某些特殊读取(除非它是隐藏的辅助节点)。

如果您想保证读取到某个数据中心,那么您应该使用“标签”而不是“最近的” - 即您将标签与副本集的成员相关联,以便您可以指定您希望某些读取只访问带有特定标签的成员。

请注意,由于驱动程序通过 ping 时间确定“最近”,因此您可能会通过强制它转到物理上最近的数据中心来破坏最佳性能,而目前可能会遇到比更远的数据中心更长的延迟。

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2019-03-27
    • 2013-03-30
    相关资源
    最近更新 更多