0

YCSB でテストしながら MongoDB を使い始めたばかりで、読み取り設定とその実装についていくつか質問があります。

1 つのプライマリ ノードと 2 つのセカンダリ ノードをセットアップし、このように YCSB Java クライアントで読み取り設定を設定しましたmongo.setReadPreference(ReadPreference.secondary());

1. YCSB をプライマリ ノードに接続するように指定しても、エラー メッセージを生成せずに読み取り操作を実行できるのはなぜですか? また、ログを確認したところ、プライマリがこれらのリクエストを処理したノードであることがわかりました。

2クライアントは本番環境のセカンダリ ノードについてどのように認識しますか? デフォルトでクライアントをどこに接続しますか? すべてのクライアントがプライマリに移動し、セカンダリのリストを取得してから、セカンダリに再接続して読み取りを実行しますか?

3ソース コードを参照すると、好みに基づいて適切なレプリカを選択するロジックが で行われreplica_set_monitor.cppていることがわかりました。

ありがとうございました

4

2 に答える 2

2

アプリケーションがプライマリにのみ接続する場合、セカンダリについては学習しません。ReadPreference.secondary()義務ではなく単なる好みです。アプリケーションは、セカンダリが存在することを認識していない場合、プライマリから読み取ります。

アプリケーションがセカンダリを認識できるようにするには、ホストの をコンストラクター引数として受け取る代わりに、クラスを使用する必要がありますDBClientReplicaSet。この配列には、セットのすべてのメンバーが含まれている必要があります。DBClientConnectionstd::vector

アプリケーションがレプリカ セットのメンバーを認識しないようにする場合は、シャード クラスター (単一のシャードのみで構成される場合があります) をセットアップし、ルーターに接続することができます。次に、mongos プロセスがレプリカ セットの抽象化を処理します。

于 2014-08-05T08:47:20.320 に答える