看来两者Mongo客户端 http://api.mongodb.org/python/current/api/pymongo/mongo_client.html and MongoReplicaSet客户端 http://api.mongodb.org/python/current/api/pymongo/mongo_replica_set_client.html可以连接到mongo副本集。事实上,它们的文档页面几乎相同 - 相同的选项、相同的方法等 - 除了后者的构造函数要求我指定一个副本集。
在这两种情况下,我们都可以指定读取首选项。在这两种情况下,如果发生降级,我们必须处理 AutoReconnect 异常。
所以我的问题是:
既然可以用两者执行完全相同的操作,为什么要使用其中一种而不是另一种呢?
两者都可以进行二次读取,对吗?文档说 ReplicaSetClient 的优点是我们可以进行二次读取,但是clearly http://api.mongodb.org/python/current/api/pymongo/index.html#pymongo.read_preferences.ReadPreference他们在两者中都得到支持。
The 文档 http://api.mongodb.org/python/current/examples/high_availability.html#mongoreplicasetclient说 ReplicaSetClient 具有“副本集健康监控”功能。这到底是什么意思呢?是否有我可以调用的新方法可以告诉我有关 replset 的运行状况的信息,而我无法通过 MongoClient 做到这一点?
In theory https://stackoverflow.com/a/17859283/3788MongoReplicaSetClient 将连接到 replset 的所有成员,而不仅仅是一个。这是错误的:您可以删除或省略连接字符串中的任何服务器,并且 MongoClient 和 MongoReplicaSetClient 仍然能够连接。我错过了什么吗?
这是一个令人困惑的 API 选择,我们在 PyMongo 2.x 中感到遗憾。我们将于 2015 年 4 月将所有客户端类合并到 PyMongo 3 中的 MongoClient 中:
http://emptysqua.re/blog/good-idea-at-the-time-pymongo-mongoreplicasetclient/ http://emptysqua.re/blog/good-idea-at-the-time-pymongo-mongoreplicasetclient/
同时:
- 当您计划连接到整个副本集时,请使用 MongoReplicaSetClient。 MongoClient 仅连接到one member.
- 单个 MongoReplicaSetClient 可用于执行主要或辅助读取,以及通过读取首选项进行更复杂的决策,请参阅我关于这个主题的博客文章 http://emptysqua.re/blog/reading-from-mongodb-replica-sets-with-pymongo/。 MongoClient 将连接到one副本集(主副本)的成员并始终从中读取数据,除非您使用 MongoClient 直接连接到辅助副本集,在这种情况下,它将始终从该辅助副本读取。
- MongoReplicaSetClient 使用后台线程监控集合的运行状况,该线程定期检查所有成员。客户端会跟踪成员是否上线,跟踪他们的 ping 时间,并注意到何时添加成员。这将减少您在片状网络上或副本集配置更改时看到的异常数量,并且允许客户端正确实现读取首选项。
- MongoReplicaSetClient 实际上确实连接到所有成员,而 MongoClient 仅连接到one成员。 MongoReplicaSetClient 尝试连接到连接字符串中列出的每个成员;一旦它连接到一个成员,它就会要求该成员提供所有其他成员的列表。从此时起,它会忽略您的连接字符串并使用从它连接到的成员获得的列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)