2013-10-24 4 views
6

MongoClientMongoReplicaSetClientの両方がmongoレプリカセットに接続できるようです。実際、ドキュメントのページはほぼ同じです - 同じオプション、同じメソッドなどですが、後者のコンストラクタではレプリカセットを指定する必要があります。pymongo:MongoReplicaSetClientを使用する利点?

いずれの場合も、読者の好みを指定することができます。いずれの場合も、ステップダウンが発生した場合はAutoReconnect例外を処理する必要があります。

だから私の質問は以下のとおりです。

  1. 1は双方とまったく同じ操作を行うことができますので、なぜ1は、他の対1を使用するのでしょうか?

  2. 両方とも二次読み取りを実行できますか?ドキュメントは、ReplicaSetClientの利点は、二次読み取りを行うことができるということですが、clearlyは両方でサポートされています。

  3. documentationには、ReplicaSetClientには「レプリカセット正常性監視」が含まれていると記載されています。それはどういう意味ですか?私が呼び出すことのできる新しいメソッドがありますか?これは、私がMongoClientと他にはできないレプリケットの健康について教えてくれるのですか?

  4. theoryでは、MongoReplicaSetClientは、1つではなく、レプリセットのすべてのメンバーに接続します。これは間違っています。接続文字列内のサーバのどれかを削除するか、MongoClientとMongoReplicaSetClientの両方を接続できます。何か不足していますか?

答えて

9

これは、私たちがPyMongo 2.xで後悔している混乱するAPIの選択です。当社は、2015年4月に、PyMongo 3にMongoClientにすべてのクライアントクラスをマージします:一方

http://emptysqua.re/blog/good-idea-at-the-time-pymongo-mongoreplicasetclient/

  1. 使用MongoReplicaSetClientを使用すると、全体のレプリカセットに接続することを計画したとき。 MongoClientはのメンバーのみに接続します。
  2. 1つのMongoReplicaSetClientを使用して、プライマリまたはセカンダリの読み取りを行うことができます。また、読み取りの優先順位を指定してより洗練された意思決定を行うこともできます。my blog post on the subjectを参照してください。 MongoClientを使用してセカンダリに直接接続しない限り、MongoClientはのレプリカセット(プライマリ)のメンバに接続し、常にそのセカンダリから読み込みます。
  3. MongoReplicaSetClientは、すべてのメンバーを定期的にチェックするバックグラウンドスレッドを使用して、セットの正常性を監視します。クライアントはメンバーが稼働しているかどうかを追跡し、ping時間を追跡し、メンバーが追加されたときに通知します。これにより、不安定なネットワーク上やレプリカセットの設定が変更されたときに表示される例外の数が減り、クライアントが読み取りプリファレンスを正しく実装できるようになります。
  4. 実際にMongoReplicaSetClientはすべてのメンバーに接続しますが、MongoClientはという1つのメンバーにしか接続しません。 MongoReplicaSetClientは、接続文字列にリストされている各メンバーに接続しようとします。 1つに接続するとすぐに、他のすべてのメンバーのリストをそのメンバーに尋ねます。この時点から、接続文字列は無視され、接続先のメンバーから取得したリストが使用されます。
+1

ちなみに、PyMongo 3は、MongoClientとMongoReplicaSetClientを「MongoClient」という1つのクラスにマージします。これにより、この混乱する状況が終了します。 –

関連する問題