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

分散されたクエリ

項目一覧

  • レプリカセットへの読み取り操作
  • レプリカセットに対する書込み (write) 操作
  • シャーディングされたクラスターへの読み取り操作
  • シャーディングされたクラスターでの書込み (write) 操作
  • Change Streams と孤立したドキュメント

デフォルトでは、クライアントはレプリカセットのプライマリから読み取ります。ただし、クライアントは読み込み設定( read preference )を指定して、読み取り操作を他のノードに指示できます。 たとえば、クライアントは読み込み設定(read preference)を、セカンダリから、または最も近いメンバーから読み取るように構成できます。

  • マルチデータセンター配置のレイテンシを軽減する

  • 高い読み取り量(書込み量に対して相対的)を分散することで読み取りスループットを向上させる

  • バックアップ操作を実行する、および/または

  • 新しいプライマリが選出されるまで、読み取りを許可します。

レプリカセットに対する読み取り操作です。デフォルトの読み込み設定(read preference)では、読み込みはプライマリにルーティングされます。読み込みの優先順位を ``nearest`` とすると、最も近いノードに読み込みをルーティングします。
クリックして拡大します

レプリカセットのセカンダリ メンバーからの読み取り操作には、プライマリの現在の状態が反映されていない場合があります。 読み取り操作を異なるサーバーに指示する 読み込み設定(read preference) の場合、非単調な読み取りが発生する可能性があります。

クライアントは因果的に整合性のあるセッション を使用でき、単調読み取りを含むさまざまな保証を提供します。

読み込み設定 (read preference) は、接続ごとまたは操作ごとに構成できます。 読み込み設定(read preference)または読み込み設定(read preference)モードの詳細については、「読み込み設定(read preference)と読み込み設定(read preference)モード 」を参照してください。

レプリカセット では 、すべての書込み (write)Go 操作はセットの プライマリ に されます。プライマリは 書込み (write) 操作を適用し、その操作をプライマリのoplogまたはoplogにレコードします。 oplog は、データセットに対する再現可能な一連の操作です。 セットのセカンダリノードは oplog を継続的に複製し、非同期プロセスで自分自身に操作を適用します。

プライマリへの読み取りと書き込みのデフォルトルーティングの図。
クリックして拡大します

レプリカセットと書込み (write) 操作の詳細については、「レプリケーション書込み保証 (write concern) 」を参照してください。

シャーディングされたクラスターを使用すると、アプリケーションに対してほぼ透過的な方法で、 mongodインスタンスのクラスター間でデータセットを分割できます。 シャーディングされたクラスターの概要については、このマニュアルの「シャーディング 」セクションを参照してください。

シャーディングされたクラスターの場合、アプリケーションはクラスターに関連付けられているmongosインスタンスの 1 つに操作を発行します。

シャーディングされたクラスターの図。
クリックして拡大します

シャーディングされたクラスターの読み取り操作は、特定のシャードに指示されると最も効率的です。 シャーディングされたコレクションへのクエリには、コレクションのシャードキーを含める必要があります。 クエリにシャードキーが含まれている場合、 mongosはコンフィギュレーションデータベースのクラスター メタデータを使用してクエリをシャードにルーティングできます。

シャーディングされたクラスターへの読み取り操作。クエリ条件には、シャード キーを含みます。クエリ ルーター ``mongos`` は、適切な 1 つまたは複数のシャードをクエリの対象にすることができます。

クエリにシャードキーが含まれていない場合、 mongosはクエリをクラスター内のすべてのシャードに送信する必要があります。 このようなスキャッター ギャザークエリは非効率的になる可能性があります。 大規模なクラスターでは、スキャッター ギャザー クエリは通常の操作には適していません。

シャーディングされたクラスターへの読み取り操作。クエリ条件にはシャードキーを含みません。クエリ ルーター ``mongos`` は、コレクションのすべてのシャードにクエリをブロードキャストする必要があります。

レプリカセット シャードの場合、レプリカセットのセカンダリ メンバーからの読み取り操作に、プライマリの現在の状態が反映されない可能性があります。 読み取り操作を異なるサーバーに指示する 読み込み設定(read preference) の場合、非単調な読み取りが発生する可能性があります。

注意

  • クライアントは因果的に整合性のあるセッション を使用でき、単調読み取りを含むさまざまな保証を提供します。

  • プライマリだけでなく、シャード レプリカセットのすべてのノードが、チャンク メタデータに関するメタデータを維持します。 これにより、読み取り保証 を使用していない場合、セカンダリからの読み取りで 孤立したデータ "available"が返されるのを防止できます。以前のバージョンでは、読み取り保証(read concern)に関係なく、セカンダリからの読み取りによって 孤立したドキュメント が返される可能性がありました。

シャーディングされたクラスターでの読み取り操作の詳細については、「 mongosシャードキーのセクション 」を参照してください。

シャーディングされたクラスター 内の シャーディングされたコレクション の場合、 mongosは、アプリケーションからの書込み操作を、データセットの特定部分を担当するシャードに指示します。 mongosは、コンフィギュレーションデータベースのクラスター メタデータを使用して、書込み操作を適切なシャードにルーティングします。

シャーディングされたクラスターの図。
クリックして拡大します

MongoDB は、 シャードキー の値に基づいて、シャーディングされたコレクション内のデータを 範囲 に分割します。次に、MongoDB はこれらのチャンクをシャードに分散します。 シャードキーは、シャードへのチャンクの分散を決定します。 これは、クラスターでの書込み (write) 操作のパフォーマンスに影響を与える可能性があります。

より小さな範囲またはチャンクに分割されたシャードキー値空間の図。

重要

単一の ドキュメントに影響するアップデート操作には、 シャードキー または_id フィールドを含める 必要 があります。複数のドキュメントに影響する更新は、シャードキーが必要な場合はより効率的ですが、すべてのシャードにブロードキャストできます。

挿入のたびにシャードキーの値が増加または減少する場合、すべての挿入操作は単一のシャードを対象とします。 その結果、単一のシャードの容量が、シャーディングされたクラスターの挿入容量の制限になります。

詳細については、「シャーディング一括書込み操作 」を参照してください。

Tip

以下も参照してください。

MongoDB 5.3 以降では、範囲の移行 中に、孤立したドキュメントの更新に対して 変更ストリームイベントは生成されません。

戻る

アトミック性とトランザクション