看来MongoClientMongoReplicaSetClient都可以连接到mongo副本集。实际上,它们的文档页面几乎相同-相同的选项,相同的方法等-除了后者的构造函数需要我指定一个copysetSet之外。

在这两种情况下,我们都可以指定读取首选项。在这两种情况下,如果发生降压,我们都必须处理AutoReconnect异常。

所以我的问题是:

  • 为什么一个人可以使用另一个而又另一个却不能使用,因为一个人可以对两者执行完全相同的操作?
  • 都可以执行二级读取,对吗?该文档说ReplicaSetClient的优点是我们可以进行辅助读取,但是clearly都支持它们。
  • documentation表示ReplicaSetClient具有“副本集运行状况监视”功能。这到底是什么意思呢?是否有我可以调用的新方法告诉我有关MongoClient无法使用的replset的运行状况?
  • theory中,MongoReplicaSetClient将连接到副本集的所有成员,而不只是一个。这是错误的:您可以删减连接字符串中的任何服务器,或者MongoClient和MongoReplicaSetClient仍然可以连接。我想念什么吗?
  • 最佳答案

    这是一个令人困惑的API选择,我们在PyMongo 2.x中感到遗憾。我们将在2015年4月将所有客户端类合并到PyMongo 3中的MongoClient中:

    http://emptysqua.re/blog/good-idea-at-the-time-pymongo-mongoreplicasetclient/

    同时:

  • 当您计划连接到整个副本集时,请使用MongoReplicaSetClient。 MongoClient仅连接到一名成员。
  • 单个MongoReplicaSetClient可用于执行主要或次要读取,以及具有读取首选项的更复杂的决策,请参阅my blog post on the subject。 MongoClient将连接到副本集(主数据库)的一个成员的,并始终从其中读取,除非您使用MongoClient直接连接到辅助数据库,在这种情况下,它将始终从该辅助数据库读取。
  • MongoReplicaSetClient通过后台线程监视集合的运行状况,该线程定期检查所有成员。客户端跟踪成员是否启动,跟踪其ping时间,并通知添加成员的时间。这将减少您在不稳定网络或副本集的配置更改时看到的异常数量,并允许客户端正确实现读取首选项。
  • 实际上,MongoReplicaSetClient确实连接到所有成员,而MongoClient仅连接到一个成员。 MongoReplicaSetClient尝试连接到连接字符串中列出的每个成员;连接到一个成员后,便立即要求该成员提供所有其他成员的列表。从这一点开始,它将忽略您的连接字符串,并使用从其连接的成员那里获得的列表。
  • 10-07 20:18