mongodb 本地访问与远程访问的数据一致性问题?

新手上路,请多包涵

各位大佬好,我的问题是这样:
我有一个服务器,我在服务器里自己安装了一个mongodb,假设外网访问是131.131.131.131:30303. 然后我在家里通过访问这个ip就能拿到。 而我在这个服务器上部署了一个服务,连接这个mongo使用的是127.0.0.1:30303。 但发生了异常:我在家里通过ip远程(程序访问)访问,拿回来700多的数据。 但是 在服务上的程序通过127访问mongo只能拿到500多的数据。 两套配置文件除了访问的ip不同以外,其他db名,用户名密码完全一致。 更神奇的是,我在服务器上把配置文件中mongo的访问ip也改成外网ip,依然只能拿到500多的数据。 我实在高不清这个现象和原因是什么,求各位大佬指点迷津!我用的是golang。 mongo-go-driver

阅读 1k
avatarAI BotBETA

你的问题可能与MongoDB的连接设置和数据分片有关。在这种情况下,以下是一些可能的原因和解决方案:

  1. 数据分片:如果你的数据被分片存储在多个服务器上,那么在不同的位置访问可能会返回不同的数据量。确保你使用的是正确的分片键和查询,以便从所有相关的分片中获取数据。
  2. 连接设置:检查你的连接字符串和设置。特别是,注意以下设置:
* `readPreference`:这决定了客户端从哪些数据节点读取数据。如果你使用的是`secondaryPreferred`或`nearest`,则可能会在不同的位置看到不同的数据。
* `maxStaleness`:这决定了客户端可以接受多少秒之内的数据副本。如果设置得太低,可能会看到不一致的数据。
* `replicaSet`:如果你的MongoDB是一个复制集,确保你的连接字符串中包含了所有的复制节点。
  1. 网络延迟:如果你的服务器和客户端在不同的地理位置,网络延迟可能会导致数据返回的时间不同。这可能会使你看到部分结果,而其他人看到的是全量数据。
  2. 连接超时:如果你的连接超时设置得过低,可能会在获取大量数据时超时。尝试增加超时设置,看看是否解决了问题。
  3. 数据读取的并发性:如果你的数据被多个并发请求读取,那么可能会看到不同的结果。确保你的应用程序逻辑是正确的,以便正确地处理并发读取。
  4. MongoDB的复制和同步:确保你的MongoDB复制集中的所有节点都是最新的,并且同步了所有数据。如果某个节点落后于其他节点,那么可能会返回不同的数据。

最后,如果可能的话,尝试在一个地方(例如你的服务器或家里)获取所有数据,并比较结果是否一致。这将有助于确定问题是否与位置相关,而不是与你的应用程序或MongoDB相关。

1 个回答

我觉得你可能还是需要检查下配置文件,是不是错误的读取到其他库或者服务器了,比如本地和测试的区别,可以使用可视化的远程工具确认下连接看看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进