pymongo: 使用MongoReplicaSetClient的优势是什么?

8
似乎 MongoClientMongoReplicaSetClient 都可以连接到 MongoDB 副本集。实际上,它们的文档页面几乎完全相同 - 相同的选项,相同的方法等等 - 只是后者的构造函数要求我指定一个 replicaSet。
在两种情况下,我们都可以指定读取偏好。在两种情况下,如果发生 stepdown,则必须处理 AutoReconnect 异常。
所以我的问题是:
  1. 为什么要使用其中一个,而不是另一个,因为两者都可以执行完全相同的操作?

  2. 两者都可以执行次要读取,对吗?文档说ReplicaSetClient的优点是我们可以进行次要读取,但显然两者都支持。

  3. 文档说ReplicaSetClient具有“副本集健康监控”功能。这到底意味着什么?我能调用哪些新方法告诉我有关replset健康状况的信息,而我不能通过MongoClient否则做到吗?

  4. 理论上,MongoReplicaSetClient将连接到replset的所有成员,而不仅仅是一个。这是错误的:您可以混淆或省略连接字符串中的任何服务器,并且MongoClient和MongoReplicaSetClient仍然能够连接。我错过了什么吗?

1个回答

10

在PyMongo 2.x版本中,我们的API选择令人困惑,我们对此感到遗憾。而在2015年4月的PyMongo 3中,我们将把所有客户端类合并到MongoClient中:

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

同时:

  1. 当您计划连接到整个副本集时,请使用MongoReplicaSetClient。MongoClient只会连接到一个成员。
  2. 单个的MongoReplicaSetClient可用于执行主要或次要读取操作,以及更复杂的读取偏好决策,详见我的博客文章。MongoClient将连接到副本集中的一个成员(即主服务器),并始终从其中读取,除非您使用MongoClient直接连接到从服务器,那么它将始终从该从服务器读取。
  3. MongoReplicaSetClient通过后台线程监视集群的健康情况,定期检查所有成员。客户端跟踪成员是否正常,在线时间,以及成员是否已添加。这将减少在不稳定的网络或副本集配置更改时看到的异常数,并使客户端能够正确实现读取偏好。
  4. MongoReplicaSetClient确实连接到所有成员,而MongoClient只会连接到一个成员。MongoReplicaSetClient尝试连接连接字符串中列出的每个成员;一旦它连接到一个成员,它就会要求该成员提供所有其他成员的列表。从此时起,它将忽略您的连接字符串并使用它从所连接的成员得到的列表。

2
顺便提一下,PyMongo 3将把MongoClient和MongoReplicaSetClient合并为一个名为“MongoClient”的类,这将结束这种令人困惑的情况。 - A. Jesse Jiryu Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接