gpt4 book ai didi

java - DBCursor.getServerAddress 是否按我的预期工作?

转载 作者:行者123 更新时间:2023-12-01 13:23:17 25 4
gpt4 key购买 nike

我预计getServerAddress返回实际处理查询的 Mongo 服务器(副本集节点之一)的地址。

我正在记录 getServerAddress 的输出并只看到主要地址,尽管我非常确定某些查询是由辅助处理的。

我有点困惑,因为我在 getServerAddress 时在辅助中看到查询(已设置 profilingLevel)返回主要。也许我错了......

这可能是 API 中的错误吗?有人遇到这样的问题吗?有没有可能 getServerAddress总是返回主要,而某些查询实际上由次要处理?

最佳答案

I expect getServerAddress to return the address of the Mongo server (one of replica set nodes), which actually handles the query.

这个期望应该是正确的:DBCursor.java:getServerAddress()返回当前光标的主机值。

I am logging output of getServerAddress and see only the primary address although I am pretty sure that some queries are handled by secondary.

默认情况下,所有查询都进入副本集的主查询。如果您没有明确指定任何 secondary read preferences在您的应用程序代码中,辅助站点上的查询来自另一个源。

由于您在问题的评论中提到使用最近读取首选项,因此读取查询应优先选择副本集的最近(通过网络延迟)成员。最近的成员可以是次要成员,也可以是主要成员。

MongoDB 手册有关于 Member Selection 的更多信息用于阅读偏好。

检查查询来源

您有多种选择来检查查询来源:

  • 作为快速检查,运行 mongostat --discover 来观察副本集中的读取 Activity ,以查看复制之外是否确实存在辅助读取 Activity 。或者,您也可以通过监控服务查看此历史记录,例如免费的 MongoDB Management Service (彩信)。

  • 检查辅助服务器上的服务器日志是否有来自应用服务器 IP 的连接。除非你设置了--quiet logging mode ,您应该会看到记录的新连接类似于:

    [initandlisten] connection accepted from 127.0.0.1:53548 #1234 (29 connections now open)

  • 登录到您的辅助节点并运行 db.currentOp() ;您应该会看到来自应用程序服务器的查询(由 currentOp 信息中的客户端 IP 标识)。

关于java - DBCursor.getServerAddress 是否按我的预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21927505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com