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 ストレージ エンジン)
  • パイソン 2.7.9
  • ピモンゴ 3.0.3
  • OS アマゾン 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 に答える