分散されたクエリ
レプリカセットへの読み取り操作
デフォルトでは、クライアントはレプリカセットのプライマリから読み取ります。ただし、クライアントは読み込み設定( read preference )を指定して、読み取り操作を他のノードに指示できます。 たとえば、クライアントは読み込み設定(read preference)を、セカンダリから、または最も近いメンバーから読み取るように構成できます。
マルチデータセンター配置のレイテンシを軽減する
高い読み取り量(書込み量に対して相対的)を分散することで読み取りスループットを向上させる
バックアップ操作を実行する、および/または
レプリカセットのセカンダリ メンバーからの読み取り操作には、プライマリの現在の状態が反映されていない場合があります。 読み取り操作を異なるサーバーに指示する 読み込み設定(read preference) の場合、非単調な読み取りが発生する可能性があります。
バージョン3.6での変更: MongoDB 3.6以降、クライアントは因果整合性のあるセッション を使用でき、単調読み取りを含むさまざまな保証を提供します。
読み込み設定 (read preference) は、接続ごとまたは操作ごとに構成できます。 読み込み設定(read preference)または読み込み設定(read preference)モードの詳細については、「読み込み設定(read preference)と読み込み設定(read preference)モード 」を参照してください。
レプリカセットに対する書込み (write) 操作
レプリカセット では 、すべての書込み (write)Go 操作はセットの プライマリ に されます。プライマリは 書込み (write) 操作を適用し、その操作をプライマリのoplogまたはoplogにレコードします。 oplog は、データセットに対する再現可能な一連の操作です。 セットのセカンダリノードは oplog を継続的に複製し、非同期プロセスで自分自身に操作を適用します。
レプリカセットと書込み (write) 操作の詳細については、「レプリケーションと書込み保証 (write concern) 」を参照してください。
シャーディングされたクラスターへの読み取り操作
シャーディングされたクラスターを使用すると、アプリケーションに対してほぼ透過的な方法で、 mongod
インスタンスのクラスター間でデータセットを分割できます。 シャーディングされたクラスターの概要については、このマニュアルの「シャーディング 」セクションを参照してください。
シャーディングされたクラスターの場合、アプリケーションはクラスターに関連付けられているmongos
インスタンスの 1 つに操作を発行します。
シャーディングされたクラスターの読み取り操作は、特定のシャードに指示されると最も効率的です。 シャーディングされたコレクションへのクエリには、コレクションのシャードキーを含める必要があります。 クエリにシャードキーが含まれている場合、 mongos
はコンフィギュレーションデータベースのクラスター メタデータを使用してクエリをシャードにルーティングできます。
クエリにシャードキーが含まれていない場合、 mongos
はクエリをクラスター内のすべてのシャードに送信する必要があります。 このようなスキャッター ギャザークエリは非効率的になる可能性があります。 大規模なクラスターでは、スキャッター ギャザー クエリは通常の操作には適していません。
レプリカセット シャードの場合、レプリカセットのセカンダリ メンバーからの読み取り操作に、プライマリの現在の状態が反映されない可能性があります。 読み取り操作を異なるサーバーに指示する 読み込み設定(read preference) の場合、非単調な読み取りが発生する可能性があります。
注意
MongoDB 3.6以降、
クライアントは因果的に整合性のあるセッション を使用でき、単調読み取りを含むさまざまな保証を提供します。
プライマリだけでなく、シャード レプリカセットのすべてのノードが、チャンク メタデータに関するメタデータを維持します。 これにより、読み取り保証 を使用していない場合、セカンダリからの読み取りで 孤立したデータ
"available"
が返されるのを防止できます。以前のバージョンでは、読み取り保証(read concern)に関係なく、セカンダリからの読み取りによって 孤立したドキュメント が返される可能性がありました。
シャーディングされたクラスターでの読み取り操作の詳細については、「 mongosとシャードキーのセクション 」を参照してください。
シャーディングされたクラスターでの書込み (write) 操作
シャーディングされたクラスター 内の シャーディングされたコレクション の場合、 mongos
は、アプリケーションからの書込み操作を、データセットの特定部分を担当するシャードに指示します。 mongos
は、コンフィギュレーションデータベースのクラスター メタデータを使用して、書込み操作を適切なシャードにルーティングします。
MongoDB は、 シャードキー の値に基づいて、シャーディングされたコレクション内のデータを 範囲 に分割します。次に、MongoDB はこれらのチャンクをシャードに分散します。 シャードキーは、シャードへのチャンクの分散を決定します。 これは、クラスターでの書込み (write) 操作のパフォーマンスに影響を与える可能性があります。
重要
挿入のたびにシャードキーの値が増加または減少する場合、すべての挿入操作は単一のシャードを対象とします。 その結果、単一のシャードの容量が、シャーディングされたクラスターの挿入容量の制限になります。
詳細については、「シャーディングと一括書込み操作 」を参照してください。