1

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

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

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

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

4

1 回答 1

1

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

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

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

于 2013-04-25T04:59:03.187 回答