pymongo:使用MongoReplicaSetClient的优势?

pou*_*def 7 python mongodb pymongo replicaset

似乎MongoClientMongoReplicaSetClient都可以连接到mongo副本集.实际上,他们的文档页面几乎相同 - 相同的选项,相同的方法等 - 除了后者的构造函数要求我指定replicaSet.

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

所以我的问题是:

  1. 为什么一个人使用一个而不是另一个,因为一个人可以执行完全相同的操作?

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

  3. 文件说,ReplicaSetClient功能"副本集健康监测." 这到底是什么意思呢?是否有我可以调用的新方法告诉我有关我不能用MongoClient做的replset的健康状况?

  4. 理论上一个MongoReplicaSetClient将连接到复制集的所有成员,而不仅仅是一个.这是错误的:您可能会删除连接字符串中的任何服务器,MongoClient和MongoReplicaSetClient仍然可以连接.我错过了什么吗?

A. *_*vis 9

这是一个令人困惑的API选择,我们在PyMongo 2.x中感到遗憾.我们将在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使用后台线程监视集合的运行状况,后台线程定期检查所有成员.客户端跟踪成员是否已启动,它是否跟踪其ping时间,并在添加成员时发出通知.这将减少您在片状网络上看到的异常数量,或者副本集的配置发生变化时,它允许客户端正确实现读取首选项.
  4. MongoReplicaSetClient实际上连接到所有成员,而MongoClient只连接到一个成员.MongoReplicaSetClient尝试连接到连接字符串中列出的每个成员; 一旦连接到一个,它就会要求该成员提供所有其他成员的列表.从这一点开始,它会忽略您的连接字符串并使用它从连接到的成员获得的列表.

  • 顺便说一句,PyMongo 3 将 MongoClient 和 MongoReplicaSetClient 合并为一个名为“MongoClient”的类,这将结束这种混乱的局面。 (2认同)