1

次のように接続文字列を設定しています。

mongodb://54.225.?.?,54.214.?.?, 54.214.?.?/rs0?connect=replicaset;replicaSet=rs0;slaveOk=true;readPreference=nearest

私はreadPreferenceを最も近いものに設定しました。テストおよび実稼働中に、クライアントに最も近い特定のノードと通信しているかどうかを保証および確認したい場合があります。これが自動的に処理されることは理解していますが、特定のデータベース呼び出しで接続している実際のレプリカ セット メンバーを見つけるために、ドライバーを介してどのような方法を使用できますか?

たとえば、3 つのデータ センターがあり、アプリケーションで最も近いデータ センターを使用したいのですが、アプリケーションが最大のパフォーマンスと遅延の短縮を必要とするため、そこに接続していることを確認したいと考えています。

4

1 に答える 1

1

単一のサーバーに接続されているのではなく、レプリカ セット全体に接続されています。したがって、ドライバーはセット内のすべてのメンバーに対して接続を開いたままにするため、書き込みをプライマリに送信することを認識し、特定の特別な読み取りをセカンダリにいつ送信できるかを認識します (非表示のセカンダリでない限り)。

読み取りが特定のデータ センターに送信されることを保証したい場合は、「最近接」の代わりに「タグ」を使用する必要があります。これは、タグをレプリカ セットのメンバーに関連付けて、特定の読み取りのみに送信するように指定できるようにする場合です。特定のラベルでタグ付けされたメンバー。

ドライバーは ping 時間によって「最も近い」と判断するため、物理的に最も近いデータ センターにドライバーを強制的に移動させることで、最高のパフォーマンスを損なう可能性があることに注意してください。

于 2013-04-25T04:59:03.187 に答える