Pymongo:如何确保仅从副本集中所需的主机(尤其是 SECONDARY)进行连接和读取
Pymongo : how to ensure connection and reading from only desired host (especially SECONDARY) in a replica set
背景
mongoDB 生产集群(未分片)3 台主机。它们属于副本集 rs0
- H1 - 小学
- H2 - 中学
- H3 - 中学
我正在尝试使用 pymongopython 编写脚本。这是一个生产集群,我希望脚本只从 H3 辅助副本集 读取,以免给主副本增加负担并使其免费使用定期活动。数据将从 批次的 2000 份文档 中的名为 "devices" 的集合中提取。这应该会进一步减少读取操作的开销。
相关代码
client = MongoClient('mongodb://H3-hostname:27017/', replicaset='rs0', readPreference='secondary')
.
.
.
.
.
devices = devices_collection.find({"status" : "ACTIVE"},{"key" : 1, "username" : 1}, sort = [("key", pymongo.ASCENDING)]).batch_size(2000)
还尝试通过如下提及集群中的所有主机,以稍微不同的方式创建客户端
client = MongoClient('mongodb://H1-Hostname:27017, H2-Hostname:27017, H3-hostname:27017/?replicaset=rs0', readPreference='secondary')
问题
根据我的理解,上面的客户端将从辅助副本集中读取 ONLY。但是当我 运行 脚本并查看云管理器时,主要的 H1 显示页面错误从 ~15-20 急剧增加到 ~600。
环境
- Mongo DB 3.0.3(MMAPv1 存储引擎)
- Python 2.7.9
- Pymongo 3.0.3
- OS亚马逊Linux
我也把这个问题发到mongo-用户组,那里有人回答了。
首先是pymongo的版本不对。它是 2.8,至少 python27 使用的是
$ python27
>>> import pymongo
>>> pymongo.version
'2.8'
和
$ python
>>> import pymongo
>>> pymongo.version
'3.0.3'
合适的语法是
MongoClient('mongodb://H3-Hostname:27017/?readPreference=secondary')
背景
mongoDB 生产集群(未分片)3 台主机。它们属于副本集 rs0
- H1 - 小学
- H2 - 中学
- H3 - 中学
我正在尝试使用 pymongopython 编写脚本。这是一个生产集群,我希望脚本只从 H3 辅助副本集 读取,以免给主副本增加负担并使其免费使用定期活动。数据将从 批次的 2000 份文档 中的名为 "devices" 的集合中提取。这应该会进一步减少读取操作的开销。
相关代码
client = MongoClient('mongodb://H3-hostname:27017/', replicaset='rs0', readPreference='secondary')
.
.
.
.
.
devices = devices_collection.find({"status" : "ACTIVE"},{"key" : 1, "username" : 1}, sort = [("key", pymongo.ASCENDING)]).batch_size(2000)
还尝试通过如下提及集群中的所有主机,以稍微不同的方式创建客户端
client = MongoClient('mongodb://H1-Hostname:27017, H2-Hostname:27017, H3-hostname:27017/?replicaset=rs0', readPreference='secondary')
问题
根据我的理解,上面的客户端将从辅助副本集中读取 ONLY。但是当我 运行 脚本并查看云管理器时,主要的 H1 显示页面错误从 ~15-20 急剧增加到 ~600。
环境
- Mongo DB 3.0.3(MMAPv1 存储引擎)
- Python 2.7.9
- Pymongo 3.0.3
- OS亚马逊Linux
我也把这个问题发到mongo-用户组,那里有人回答了。
首先是pymongo的版本不对。它是 2.8,至少 python27 使用的是
$ python27
>>> import pymongo
>>> pymongo.version
'2.8'
和
$ python
>>> import pymongo
>>> pymongo.version
'3.0.3'
合适的语法是
MongoClient('mongodb://H3-Hostname:27017/?readPreference=secondary')