Docs Menu
Docs Home
/
MongoDBマニュアル
/ /

サーバー選択アルゴリズム

項目一覧

  • レプリカセットの読み込み設定 (read preference)
  • シャーディングされたクラスターの読み込み設定 (read preference)

MongoDB ドライバーは サーバー選択アルゴリズムを使用して、使用するレプリカセット メンバーを選択します。または、複数の mongosインスタンスに接続している場合は、使用するmongosインスタンスを選択します。

サーバーは操作ごとに 1 回選択されます。

このページの情報は、次の環境でホストされている配置に適用されます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

注意

読み取り操作を含む分散トランザクションでは、読み込み設定(read preference) primary を使用する必要があります。特定のトランザクション内のすべての操作は、同じノードにルーティングする必要があります。

サーバーは操作ごとに 1 回行われ、メンバーの読み取り資格を決定するために 読み込み設定( read preference )とlocalThresholdMS設定によって制御されます。 読み込み設定 (read preference) は、操作ごとに再評価されます。

読み込み設定(read preference)モード
選択プロセス
primary (デフォルト)
  1. ドライバーはプライマリを選択します。

  1. ドライバーは適格なセカンダリ メンバーのリストをアセンブルします。 maxStalenessSecondsと読み込み設定(read preference)で指定されるタグ セットは、ノードの適格性をさらに制限する可能性があります。

  2. 適格なメンバーのリストが空でない場合、ドライバーはどの適格なメンバーが「最も近い」か(つまり、平均ネットワーク ラウンド トリップ時間が最も低いメンバー)であるかを判断し、平均ラウンド トリップ時間を加算してレイテンシ ウィンドウを計算します。この「最も近い」サーバーとlocalThresholdMSの ドライバーはこのレイテンシウィンドウを使用して、適格なノードのリストをこのウィンドウに含まれるノードに絞り込みます。

  3. レイテンシ ウィンドウ内の適格なメンバーのこのリストから、ドライバーは適格なメンバーをランダムに選択します。

  1. ドライバーは、適格なノード(プライマリおよびセカンダリ)のリストをアセンブルします。 maxStalenessSecondsと読み込み設定(read preference)で指定されるタグ セットは、ノードの適格性をさらに制限する可能性があります。

  2. 適格なメンバーのリストが空でない場合、ドライバーはどの適格なメンバーが「最も近い」か(つまり、平均ネットワーク ラウンド トリップ時間が最も低いメンバー)であるかを判断し、平均ラウンド トリップ時間を加算してレイテンシ ウィンドウを計算します。この「最も近い」サーバーとlocalThresholdMS [1]の ドライバーはこのレイテンシウィンドウを使用して、適格なノードのリストをこのウィンドウに含まれるノードに絞り込みます。

  3. レイテンシ ウィンドウ内の適格なメンバーのこのリストから、ドライバーは適格なメンバーをランダムに選択します。

  1. プライマリが使用可能な場合、ドライバーはプライマリを選択します。

  2. プライマリが使用できない場合、サーバー選択は読み込み設定(read preference secondaryのプロセスに従って適格なセカンダリ メンバーを選択します。

  1. 読み込み設定(read preference) secondaryのサーバー選択プロセスに従って、適格なセカンダリ メンバーのリストが空でない場合、ドライバーは適格なセカンダリ メンバーを選択します。

  2. それ以外の場合、リストが空の場合、ドライバはプライマリを選択します。

接続シードリストに複数のmongosインスタンスがある場合、ドライバーはどのmongosが「最も近い」ノード(平均ネットワーク ラウンド トリップ時間が最も低いノード)であるかを判断し、次のようにレイテンシ ウィンドウを計算します。この「最も近い」 mongosインスタンスとlocalThresholdMSの平均ラウンド トリップ時間。 ドライバーは、レイテンシ ウィンドウ内のmongosインスタンス全体でランダムに負荷分散されます。

レプリカセット シャードを持つシャーディングされたクラスターの場合、 mongosはシャードから読み取るときに読み込み設定(read preference)を適用します。 サーバーの選択は、 読み込み設定( read preference ) とreplication.localPingThresholdMs設定によって決まります。 読み込み設定 (read preference) は、操作ごとに再評価されます。

mongosは、primary 以外の読み込み設定( read preference )モードで ヘッジされ た読み取りをサポートします。つまり、 mongosは、 primary以外の 読み込み設定( read preference ) を使用している場合に、読み取り操作をヘッジするために、追加の読み取りを別のノードに送信できます(利用可能な場合)。 読み取り操作をヘッジする ために送信される追加の読み取りでは、 maxTimeMSForHedgedReadsmaxTimeMS値が使用され

ヘッジされた読み取りは、以下の操作でサポートされています。

ヘッジされた読み取りを使用するには、次の手順に従います。

  • mongosではヘッジされた読み取りのサポートが有効になっている必要があります(デフォルト)。 readHedgingModeパラメーターを参照してください。

  • primary以外の読み込み設定( read preference )では、ヘッジされた読み取りの使用を有効にする必要があります。

読み込み設定(read preference)モード
選択プロセス
primary (デフォルト)
  1. mongosはプライマリを選択します。

  1. mongosは、資格のあるセカンダリ メンバーのリストをアセンブルします。 maxStalenessSecondsと読み込み設定(read preference)で指定されるタグ セットは、ノードの適格性をさらに制限する可能性があります。

  2. 資格のあるノードのリストが空でない場合、 mongosはどの資格のあるノードが「最も近い」か(平均ネットワーク ラウンド トリップ時間が最も低いノード)を決定し、平均的なラウンドトリップ時間を加算してレイテンシ ウィンドウを計算します。この「最も近い」サーバーとreplication.localPingThresholdMs (または--localThresholdコマンドライン オプション)の 時間 mongosはこのレイテンシ ウィンドウを使用して、適格なメンバーのリストをこのウィンドウに含まれるメンバーに絞り込みます。

  3. レイテンシ ウィンドウ内にある適格なメンバーのこのリストから、 mongosは適格なメンバーをランダムに選択します。 ヘッジされた読み取りを使用する場合、 mongosは 2 番目の適格なメンバーを選択します(使用可能な場合)。

  1. mongosは、資格のあるメンバー(プライマリとセカンダリ)のリストをアセンブルします。 maxStalenessSecondsと読み込み設定(read preference)で指定されるタグ セットは、ノードの適格性をさらに制限する可能性があります。

  2. 資格のあるノードのリストが空でない場合、 mongosはどの資格のあるノードが「最も近い」か(平均ネットワーク ラウンド トリップ時間が最も低いノード)を決定し、平均的なラウンドトリップ時間を加算してレイテンシ ウィンドウを計算します。この「最も近い」サーバーとreplication.localPingThresholdMs (または--localThresholdコマンドライン オプション)の 時間[1]mongosはこのレイテンシ ウィンドウを使用して、適格なメンバーのリストをこのウィンドウに含まれるメンバーに絞り込みます。

  3. レイテンシ ウィンドウ内にある適格なメンバーのこのリストから、 mongosは適格なメンバーをランダムに選択します。 ヘッジされた読み取りを使用する場合、 mongosは 2 番目の適格なメンバーを選択します(使用可能な場合)。

  1. プライマリが使用可能な場合、 mongosはプライマリを選択します。

  2. プライマリが使用できない場合、またはmongosヘッジされた読み取りを使用している場合、サーバーは読み込み設定(read preference secondaryのプロセスに従います。 ヘッジされた読み取りの場合、

    • プライマリが使用可能な場合、 mongosは適格なセカンダリを 1 つ選択します(使用可能な場合)。

    • プライマリが使用できない場合、 mongosは適格なセカンダリを 2 つ選択します(使用可能な場合)。

  1. 読み込み設定(read preference) secondaryのサーバー選択プロセスに従い、適格なセカンダリ メンバーのリストが空でない場合、 mongosは適格なセカンダリを選択します。 ヘッジされた読み取りを使用している場合、 mongosは別のセカンダリ(使用可能な場合)を選択します。

  2. 資格のあるセカンダリ メンバーのリストが空の場合、またはmongosがヘッジされた読み取りを使用しており、適格なセカンダリが 1 つしか使用できない場合、 mongosはプライマリを選択します。

[1]12デフォルトのしきい値は 15 ミリ秒です。

戻る

ヘッジされた読み取り