範囲ベースのシャーディング
範囲ベースのシャーディングでは、まず、シャードキー値によって決定される連続した範囲にデータが分割されます。 このモデルでは、「近い」シャードキー値を持つドキュメントは、同じチャンクまたはシャードにある可能性が高くなります。 これにより、読み取りが連続した範囲内のドキュメントを対象とする効率的なクエリが可能になります。 ただし、シャードキーの選択が十分でないと、読み取りと書込みの両方のパフォーマンスが低下する可能性があります。 「 シャードキー選択 」を参照してください。
ハッシュされたシャーディングやゾーンに必要なオプションなどの他のオプションが設定されていない場合、範囲ベースのシャーディングがデフォルトのシャーディング方法です。
シャードキー選択
範囲シャーディングは、シャードキーが次の特権を示している場合に最も効率的です。
次の図は、フィールド X
をシャードキーとして使用するシャーディングされたクラスターを示します。 X
の値が範囲が大きく、頻度が低く、非単調な割合で変化する場合、挿入の分散は次のようになります。
コレクションのシャーディング
sh.shardCollection()
メソッドを使用して、コレクションの完全な名前空間と、 シャードキー として使用するターゲット インデックス または 複合インデックス を指定します。
sh.shardCollection( "database.collection", { <shard key> } )
重要
MongoDB 5.0 以降、ドキュメントのシャードキーを変更することでコレクションの再シャーディングが可能です。
既存のシャードキーにサフィックス フィールドを追加することで、シャードキーを調整できます。
入力済みのコレクションのシャーディング
入力されるコレクションをシャーディングする場合、最初に作成されるのは 1 つのチャンクのみです。 その後、構成された 範囲サイズ に従って、必要に応じてそのチャンクから範囲を移行します。
空のコレクションのシャーディング
空のコレクションをシャーディングする場合:
空または存在しないコレクションにゾーンとゾーン範囲が指定されていない場合は以下のとおりです。
シャーディング操作では、シャードキー値の全範囲をカバーする空のチャンクが 1 つ作成されます。
最初のチャンク作成後、必要に応じて、バランサーによって最初のチャンクがシ複数のシャードに移行されます。また、将来のチャンク分散もバランサーで管理されます。
空のコレクションまたは存在しないコレクションにゾーンとゾーン範囲が指定されている場合:
シャーディング操作では、定義されたゾーン範囲の空のチャンクと、シャードキー値の全範囲をカバーする追加のチャンクが作成され、ゾーン範囲に基づいて初期チャンク分散が実行されます。このようにチャンクを最初に作成して分散することで、ゾーン シャーディングの設定を迅速に行うことができます。
初期分散後、バランサーは今後のチャンク分散を管理します。