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

Zones

項目一覧

  • 動作と操作

シャーディングされたクラスターでは、 シャードキー に基づきシャーディングされたデータの ゾーン を作成できます。各ゾーンはクラスター内の 1 つまたは複数のシャードに関連付けることができ、 シャードは任意の数のゾーンに関連付けることができます。 MongoDB はバランスの取れたクラスター内で、ゾーンによってカバーされるチャンクをそのゾーンに関連付けられているシャードのみに移行します。

ゾーンを適用できる一般的な配置パターンは次のとおりです。

  • 特定のシャードセットでデータの特定のサブセットを分離します。

  • 最も関連するデータが、アプリケーション サーバーに地理的に最も近いシャードにあることを確認します。

  • シャード ハードウェアのハードウェアまたはパフォーマンスに基づいて、データをシャードにルーティングします。

次の図には、3 つのシャードと 2 つのゾーンを持つシャーディングされたクラスターが示されています。 Aゾーンは、下限が1で上限が10の範囲を表します。 Bゾーンは、下限が10で上限が20の範囲を表します。 シャードAlphaBetaにはAゾーンがあります。 シャードBetaにはBゾーンもある。 シャードCharlieには関連付けられているゾーンがありません。 クラスターは定常状態で、どのゾーンにも違反するチャンクはありません。

シャーディングされたクラスター内のゾーンに基づくデータの分散図
クリックして拡大します

各ゾーンは、コレクションのシャードキー値の 1 つ以上の範囲をカバーします。 任意のゾーンがカバーする各範囲は、常に下限を含み、上限を含まない範囲です。 ゾーンは範囲を共有できません。また、重複する範囲を持つこともできません。

たとえば、 {"x": 1}のシャードキーを考えてみましょう。 クラスターには次のゾーン範囲があります。

{ "x" : 5 } --> { "x" : 10 } // Zone A
{ "x" : 10} --> { "x" : 20 } // Zone B
  • シャードキー値が7のドキュメントはゾーン A にルーティングされます。

  • シャードキー値が10のドキュメントはゾーン B にルーティングされます。

シャードキーにハッシュされたフィールドが含まれているコレクションの場合、そのフィールドのゾーン範囲とデータ分布はハッシュされた値になります。 ゾーンには、ハッシュされたシャードキーの値が定義された範囲に該当するドキュメントが含まれます。 ハッシュされたフィールドのゾーン範囲では、ハッシュされていないフィールドのゾーン範囲と同じ予測可能なドキュメント ルーティング動作はありません。

たとえば、 {"x" : "hashed"}のシャードキーを考えてみましょう。 次の範囲は、 5から10までのハッシュされた範囲を表します。

{ "x": NumberLong("4470791281878691347") } --> { "x": NumberLong("7766103514953448109") } // Zone A
  • シャードキー値が1のドキュメントは、 1ハッシュ値が定義された範囲に収まるため、ゾーン A にルーティングされます。

  • シャードキー値が15のドキュメントは、 15ハッシュ値が定義された範囲に収まるため、ゾーン A にルーティングされます。

  • シャードキー値が8のドキュメントは、 8ハッシュ値が定義された範囲に該当しないため、ゾーン A にルーティングされません。

mongoshは、指定されたパラメータの変更後のハッシュ値を計算するためのconvertShardKeyToHashed()を提供します。

ハッシュされたフィールドのゾーン範囲の有効な用途の 1 つは、コレクションのデータを 1 つのゾーン内のシャードに制限することです。 MinKeyを下限として、 MaxKeyを上限として使用し、可能な ハッシュされたシャードキー 値の全範囲をカバーするゾーン範囲を作成します。

範囲を定義するために、MongoDB はupdateZoneKeyRangeコマンドと、関連するヘルパー メソッドsh.updateZoneKeyRange()sh.addShardTag()を提供します。

updateZoneKeyRangeデータベースコマンドとそのヘルパーsh.updateZoneKeyRange()およびsh.addTagRange()は、シャーディングされていないコレクションまたは存在しないコレクションで実行できます。

コレクションを削除すると、それに関連付けられたゾーンやタグの範囲も削除されます。

空のコレクションまたは存在しないコレクションをシャーディングする前にゾーンとゾーン範囲を定義することで、シャード コレクション操作は定義されたゾーン範囲のチャンクと、シャードキー値の全範囲をカバーする追加のチャンクを作成し、初期化を実行しますゾーン範囲に基づく チャンク分散 。 このように初期チャンクを作成して分散することで、ゾーン シャーディングの設定を迅速に行うことができます。 初期分散後、バランサーは今後のチャンク分散を管理します。

MongoDB は、ハッシュされた複合インデックスでのコレクションのシャーディングをサポートしています。 複合ハッシュされたシャードキーを使用して、空のコレクションまたは存在しないコレクションをシャーディングする場合、MongoDB が初期チャンクの作成と分散を実行するために追加の要件が適用されます。

例については、「 空または存在しないコレクションのゾーンとゾーン範囲の事前定義」を参照してください。

Tip

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

バランサーは、シャーディングされたコレクションの チャンク をクラスター内のすべてのシャードに均等に分散しようとします。

移行用にマークされた各チャンクごとに、バランサーは設定されたゾーンの可能性のある各宛先シャードを確認します。 チャンク範囲がゾーンに該当する場合、バランサーはチャンクをそのゾーン内のシャードに移行します。 ゾーンに該当しないチャンクはクラスター内の任意のシャードに存在でき、通常に移行されます。

バランシング ラウンド中に、バランサーがいずれかのチャンクが特定のシャードの構成済みゾーンに違反していることを検出した場合、バランサーはそれらのチャンクを競合が存在しないシャードに移行します。

ゾーンをシャードに関連付け、シャーディングされたコレクションのためにゾーンをシャードキー範囲で構成した後、クラスターがシャーディングされたコレクションの影響データを移行するのに時間がかかる場合があります。 これは、チャンクの分割とクラスター内のデータの現在の分散状況によって異なります。 バランシングが完了すると、特定のゾーン内のドキュメントの読み取りと書込みは、そのゾーン内のシャードまたはシャードにのみルーティングされます。

構成が完了すると、バランサーは今後のバランシング ラウンド中に ゾーンを尊重します。

Tip

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

カバーされるゾーンに新しい範囲を定義する場合、シャードキーに含まれるフィールドを使用する必要があります。複合シャードキーを使用する場合、シャードキーのプレフィックスを範囲に含める必要があります。

たとえば、シャードキー{ a : 1, b : 1, c : 1 }の場合、 bの値をカバーする範囲を作成または更新するには、プレフィックスとしてaを含める必要があります。 cの値をカバーする範囲を作成または更新するには、プレフィックスとしてabを含める必要があります。

シャードキーに含まれていないフィールドを使用して範囲を作成することはできません。 たとえば、 ゾーン を使用して地理的場所に基づいてデータを分割する場合、シャードキーには最初のフィールドに地理データが含まれている必要があります。

コレクションにシャードキーを選択するときは、ゾーンの構成に使用するフィールドを検討してください。 シャードキーの選択に関する考慮事項については、「 シャードキーの選択 」を参照してください。

ゾーン範囲は、常に下限を含み、上限を含まない範囲です。

Tip

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

戻る

範囲ベースのシャーディング

項目一覧