Docs Menu

分散されたクエリ

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

Read operations to a replica set. Default read preference routes the read to the primary. Read preference of ``nearest`` routes the read to the nearest member.
クリックして拡大します

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

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

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

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

Diagram of default routing of reads and writes to the primary.
クリックして拡大します

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

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

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

Diagram of a sharded cluster.
クリックして拡大します

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

Read operations to a sharded cluster. Query criteria includes the shard key. The query router ``mongos`` can target the query to the appropriate shard or shards.

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

Read operations to a sharded cluster. Query criteria does not include the shard key. The query router ``mongos`` must broadcast query to all shards for the collection.

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

注意

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

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

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

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

Diagram of a sharded cluster.
クリックして拡大します

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

Diagram of the shard key value space segmented into smaller ranges or chunks.

重要

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

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

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

Tip

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

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