我的连接字符串设置如下:
mongodb://54.225.?.?,54.214.?.?, 54.214.?.?/rs0?connect=replicaset;replicaSet=rs0;slaveOk=true;readPreference=nearest
我将readPreference设置为最近。在测试和生产期间,我们有时会保证并检查我们是否与最接近客户端的某些节点进行通信。我知道这是自动处理的,但我可以使用什么方法通过驱动程序找出我连接到的特定数据库调用的实际副本集成员。
例如,我有三个数据中心,我希望我们的应用程序使用离它最近的应用程序,但我想确保我们正在连接它,因为应用程序需要最大的性能和减少的延迟。
答案 0 :(得分:1)
您未连接到单个服务器 - 您已连接到整个副本集。因此,由于驱动程序保持连接对集合中的所有成员开放,因此它知道将写入发送到主服务器,并且它知道何时可以向辅助服务器发送某些特殊读取(除非它是隐藏的辅助服务器)。
如果你想保证读取到某个数据中心,那么你应该使用“标签”而不是“最近” - 这就是当你将标签与副本集的成员关联起来时,你可以指定你想要某些读取到只能转到标有特定标签的会员。
请注意,由于驱动程序通过ping时间确定“最近”,因此可能会强制它转到距离数据中心较远的物理上最近的数据中心,从而使性能最差。