【问题标题】:pymongo MongoClient without replicaSet parameter没有replicaSet参数的pymongo MongoClient
【发布时间】:2020-07-06 07:58:09
【问题描述】:

我在 MongoClient 中使用的 url 中指定了三个 mongo 节点。它看起来像这样“mongodb://A,B,C,D”。我需要将读取首选项作为辅助,为此我使用了 SECONDARY_PREFERRED。一切都按预期工作,我能够毫无问题地连接到辅助节点。我使用 - mongo_con = MongoClient(db_url, read_Preference=ReadPreference.SECONDARY_PREFERRED)

我想知道如果在获取连接时不发送“replicaSet”可选参数会有什么影响。如果我使用 repicaSet 并发送正确的副本集名称,连接会有什么不同,如果我发送的副本集名称不正确怎么办?它将如何影响我的连接?

【问题讨论】:

  • 你试试看怎么样?
  • 正如我所说,我试过了,效果很好。我想知道长期影响。如果不花费数周时间并观察行为和极端情况,我就无法“弄清楚”。感谢您的宝贵建议。
  • 应该没什么区别。您连接的服务器(mongo 节点)知道它连接到的副本集。
  • 所以只有当我在MongoClient中使用的url中只指定主节点时才使用replicaSet参数?我只是观察到人们有时会使用 replicaSet 参数,但不确定它的更广泛影响。
  • 诚然,如果不阅读驱动程序的源代码,这个问题(至少是前半部分)几乎是不可能“弄清楚”的。

标签: python mongodb pymongo


【解决方案1】:

我想知道如果我在获取连接时不发送“replicaSet”可选参数会有什么影响。

这取决于您使用的驱动程序(pymongo/node 等)以及您在连接字符串中指定的种子数。

当给定一个种子时,一些驱动程序假设您只希望直接连接到该服务器,而一些驱动程序会发现部署的拓扑,如果它是副本集,则会发现所有其他节点并“连接到副本集”。

目前正在通过 directConnection URI 选项跨驱动程序对行为进行标准化。

当您提供replicaSet URI 选项时,您将强制执行第二种行为,即在所有驱动程序中发现副本集。只要您不在单节点副本集中,也可以提供多个种子。

如果我使用 repicaSet 并发送正确的副本集名称,连接会有什么不同,如果我发送的副本集名称不正确怎么办?它将如何影响我的连接?

如果您指定 replicaSet 并提供了错误的集合名称,驱动程序将过滤掉所有具有正确集合名称的服务器(或者从驱动程序的角度来看,您指示的 replicaSet 是正确的,而由服务器会出错)。您的应用程序将无法找到任何可用的服务器。

【讨论】:

    猜你喜欢
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 2022-01-22
    • 2017-06-13
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多