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

シャード ゾーンの管理

項目一覧

  • ゾーンにシャードを追加する
  • ゾーン範囲の作成
  • ゾーン範囲の削除
  • 既存のゾーンを表示

シャーディングされたクラスターでは、シャードのグループを表すゾーンを作成し、そのゾーンにシャードキー値の 1 つ以上の範囲を関連付けることができます。 MongoDB は、ゾーン範囲に含まれる読み取りと書込みを、ゾーン内のシャードのみにルーティングします。

Tip

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

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

sh.addShardToZone()mongosインスタンスに接続すると、 メソッドを使用してゾーンを特定のシャードに関連付けます。単一のシャードには複数のゾーンが存在する場合や、複数のシャードに同じゾーンが存在する場合もあります。

次の例では、ゾーンNYCを 2 つのシャードに追加し、ゾーンSFONRTを 3 つ目のシャードに追加します。

sh.addShardToZone("shard0000", "NYC")
sh.addShardToZone("shard0001", "NYC")
sh.addShardToZone("shard0002", "SFO")
sh.addShardToZone("shard0002", "NRT")

次の例のように、 インスタンスに接続しているときにsh.removeShardFromZone() メソッドを使用して特定のシャードからゾーンを削除できます。これではシャードからmongosNRT ゾーンを削除します。

sh.removeShardFromZone("shard0002", "NRT")

ゾーンのシャードキーの範囲を定義するには、sh.updateZoneKeyRange() インスタンスに接続してmongos メソッドを使用します。どのシャードキー範囲にも割り当てられるゾーンは1 つだけです。 定義された範囲を重複することはできません。

recordsデータベースにusersという名前のコレクションがあり、 zipcodeフィールドでシャーディングされている場合。 次の操作は以下を割り当てます。

  • Manhattan と Atlas の 2 つの範囲の郵便番号( NYCゾーン)

  • サンフランシスコの郵便番号の 1 つの範囲( SFOゾーン)

sh.updateZoneKeyRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC")
sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC")
sh.updateZoneKeyRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")

注意

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

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

ゾーンから範囲を削除するには、 shellヘルパー メソッドsh.removeRangeFromZone()を使用します。

次の例では、manhattan 内の郵便番号の範囲のNYCゾーン割り当てを削除します。

sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})

注意

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

クラスター内の各シャードに関連付けられているゾーンを一覧表示するには、 sh.status()を使用します。 また、 configデータベースのshardsコレクションをクエリしてシャード ゾーンを表示することもできます。

次の例では、 find()メソッドを使用して、 NYCゾーンを持つすべてのシャードを返します。

use config
db.shards.find({ tags: "NYC" })

すべての名前空間のゾーン範囲は、 configデータベースのtagsコレクションで確認できます。 sh.status()の出力にはすべてのゾーン範囲も表示されます。

次の例では、 find()メソッドを使用して、 NYCゾーンに関連付けられている範囲を返します。

use config
db.tags.find({ tag: "NYC" })

戻る

Zones