2

背景

mongoDB 生产集群(未分片)3 台主机。它们属于副本集 rs0

  • H1 - 初级
  • H2 - 中学
  • H3 - 中学

我正在尝试使用pymongo编写python脚本。这是一个生产集群,我希望脚本仅从H3 辅助副本集读取,以免对主副本造成负担,并使其免费用于常规活动。数据将从2000 个文档批次中名为“设备”的集合中获取。这应该会进一步减少读取操作的开销。

相关代码

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')

问题

据我了解,上述客户端将从辅助副本集中读取。但是当我运行脚本并查看云管理器时,主要的 H1 显示页面错误从 ~15-20 增加到 ~600 并急剧增加。

环境

  • Mongo DB 3.0.3(MMAPv1 存储引擎)
  • Python 2.7.9
  • Pymongo 3.0.3
  • 操作系统 亚马逊 Linux
4

1 回答 1

0

我还将这个问题发布到 mongo-user 组,在那里得到了回答。

首先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')
于 2015-10-02T00:27:31.500 回答