AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

updateZoneKeyRange(データベースコマンド)

updateZoneKeyRange

The updateZoneKeyRange administrative command can either create or remove the association between a range of shard key values and a zone.

You can run updateZoneKeyRange database command and its helpers sh.updateZoneKeyRange() and sh.addTagRange() on an unsharded collection or a non-existing collection.

Tip

In mongosh, this command can also be run through the sh.updateZoneKeyRange() helper method.

Helper methods are convenient for mongosh users, but they may not return the same level of information as database commands. In cases where the convenience is not needed or the additional return fields are required, use the database command.

updateZoneKeyRange を実行するには、db.runCommand( { <command> } ) メソッドを使用します。

管理データベースでaddShardToZoneを実行する必要があります。

このコマンドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

このコマンドの構文は、次のとおりです。

db.adminCommand(
{
updateZoneKeyRange: <string>,
min: <document>,
max: <document>,
zone: <string> | <null>
}
)

このコマンドは、次のフィールドを使用します。

Parameter
タイプ
説明

updateZoneKeyRange

string

範囲に関連付けるコレクションの 名前空間 。

コマンドが成功するには、コレクションがシャーディングされている必要があります。

min

ドキュメント

シャードキー値の範囲の包括的下限。

シャードキーの各フィールドを<fieldname> : <value>の形式で指定します。 値は、シャードキーと同じ BSON type である必要があります。

ハッシュされたシャーディングを使用するには、 minのフィールド値がNumberLongである必要があります。

max

ドキュメント

シャードキー値の範囲の排他的上限。

シャードキーの各フィールドを<fieldname> : <value>の形式で指定します。 値は、シャードキーと同じ BSON type である必要があります。

ハッシュされたシャーディングを使用するには、 maxのフィールド値がNumberLongである必要があります。

zone

string

minmaxで区切られた範囲に関連付けるゾーンの名前。

値が既存のゾーンと一致しない場合、コマンドは失敗します。

nullを指定して、下限がminで、上限がmaxの範囲とupdateZoneKeyRangeコレクションとの間の関連付けを削除します。 minmaxの値は、対象範囲と完全に一致する必要があります。

If no zone range matches the minimum and maximum bounds passed to updateZoneKeyRange, nothing is removed.

Only issue updateZoneKeyRange when connected to a mongos instance.

mongosh は 2 つのヘルパー メソッドを提供します。

シャーディングされたコレクションの既存の範囲と下限と上限が重複するシャードキー値の範囲は作成できません。 たとえば、 1から10の既存の範囲がある場合、 5から20の新しい範囲は作成できません。新しい範囲は既存の範囲と重複するためです。

ゾーンには複数のデータ範囲を関連付けることができますが、範囲は最大で 1 つのゾーンに関連付けることができます。

When removing the association between a range and a zone, updateZoneKeyRange does not remove the zone. Use the removeShardFromZone command to remove the association between a zone and a shard.

シャーディングされたクラスター内のゾーンの詳細については、ゾーンのマニュアル ページを参照してください。

空のコレクション、または存在しないコレクションでゾーンシャーディングを実行することを検討している場合は、コレクションをシャーディング前に、updateZoneKeyRange 40を使用してゾーンとゾーン範囲を作成します(..2 40以降)。バージョン..3 以降、空のコレクションまたは存在しないコレクションにゾーンとゾーン範囲を作成すると、 MongoDB はコレクションをシャーディングときに初期チャンクの作成と分散プロセスを最適化できます。この最適化されたプロセスにより、シャーディング後にゾーンを作成する よりもバランサーのオーバーヘッドが少なく、ゾーンシャーディングの迅速なセットアップがサポートされます。バランサーは、最適化された最初のチャンク作成と分散後に、すべてのチャンク管理を実行します。

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

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

ハッシュされたフィールドがシャードキーのプレフィックス(つまり、シャードキーの最初のフィールド)である場合、MongoDB が初期チャンクの作成と分散を実行するには、次のすべてが当てはまる必要があります。

  • コレクションには単一のゾーン範囲があり、すべての下限フィールドにはMinKey 、すべての上限フィールドにはMaxKeyが含まれます。

  • sh.shardCollection()presplitHashedZones: trueオプションを指定します。

ハッシュされたフィールドがシャードキーのプレフィックスではない場合(つまり、シャードキーにハッシュされていない先頭フィールドが 1 つ以上ある場合)、MongoDB が初期チャンクの作成と分散を実行するには、次のすべてが当てはまる必要があります。

  • コレクションには、個別のプレフィックスフィールド値の組み合わせごとに 1 つのゾーン範囲があります(つまり ハッシュされたフィールドに先行するすべてのフィールド)。

  • 各ゾーン範囲の下限について、ハッシュされたフィールドとそれ以降のすべてのフィールドにMinKeyを指定します。

  • 各ゾーン範囲について、少なくとも 1 つの上限プレフィックス フィールドがその下限のカウンター と 異なる必要があります。

  • sh.shardCollection()presplitHashedZones: trueオプションを指定します。

複合ハッシュされたシャードキーでの初期チャンク分散のためのゾーンとゾーン範囲の定義のより詳細な例については、「空または存在しないコレクションのゾーンとゾーン範囲の事前定義 」を参照してください。

After successfully running updateZoneKeyRange, there may be chunk migrations during the next balancer round.

ゾーンに範囲を追加した後、ゾーンによってカバーされる範囲を含む チャンク をそのゾーン内のシャードに移行するために、バランサーはまず を実行する必要があります。 バランシングが完了するまで、シャーディングされたクラスターに構成されたゾーンを考慮すると、いくつかのチャンクが間違ったシャードに存在する可能性があります。

範囲とゾーンの間の関連付けを削除すると、そのゾーン内のシャードで範囲によってカバーされるチャンクを維持する制約が削除されます。 次のバランサー ラウンド中に、バランサーは以前に ゾーンによってカバーされていたチャンクを移行する場合があります。

シャーディングされたクラスターで移行がどのように機能するかについて詳しくは、 シャーディングされたクラスター バランサーのドキュメントを参照してください。

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

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

以前のバージョンでは、MongoDB は削除されたコレクションのタグ関連付けを削除せず、後で同じ名前で新しいコレクションを作成すると、古いタグの関連付けが新しいコレクションに適用されます。

認証 を使用して実行されているシャーディングされたクラスターの場合は、次のいずれかとして認証する必要があります。

  • configデータベース内のさまざまなコレクションに対して指定されたアクションを含む特権を持つユーザー:

    • findconfig.shardsコレクションの

    • コレクションのfind 、 、 。updateremoveconfig.tags

    または、あるいは、

  • クラスター リソースでenableSharding を含む 権限 を持つユーザー。

The clusterAdmin or clusterManager built-in roles have the appropriate permissions for issuing updateZoneKeyRange. See the documentation page for Role-Based Access Control for more information.

シャーディングされたコレクションexampledb.collectionとシャードキーが{ a : 1 }の場合、次の操作を実行すると、 alphaゾーンに下限が1で上限が10の範囲が作成されます。

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : "alpha"
}
)

次の操作では、 nullzoneフィールドに渡すことで、以前に作成した範囲が削除されます。

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : null
}
)

minmaxは、ターゲット範囲の境界と完全に一致する必要があります。 次の操作は、以前に作成した範囲を削除しようとしますが、 minの限界として{ a : 0 }を指定します。

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 0 },
max : { a : 10 },
zone : null
}
)

While the range of { a : 0 } and { a : 10 } encompasses the existing range, it is not an exact match and therefore updateZoneKeyRange does not remove anything.

シャーディングされたコレクションexampledb.collectionとシャードキー{ a : 1, b : 1 }がある場合、次の操作は{ a: 1, b : 1 }の下限と{ a : 10, b : 10}の上限をカバーする範囲を作成し、それをalphaゾーンに関連付けます。

admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1, b : 1 },
max : { a : 10, b : 10 },
zone : "alpha"
}
)