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

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

reshardCollection

The reshardCollection command changes the shard key for a collection and changes the distribution of your data.

Tip

In mongosh, this command can also be run through the sh.reshardCollection() 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.

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

  • MongoDB Atlas: The fully managed service for MongoDB deployments in the cloud

注意

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

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

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

db.adminCommand(
{
reshardCollection: "<database>.<collection>",
key: { "<shardkey>" },
unique: <boolean>,
numInitialChunks: <integer>,
numSamplesPerChunk: <integer>, // New in MongoDB 8.0.20
collation: { locale: "simple" },
zones: [
{
min: { "<document with same shape as shardkey>" },
max: { "<document with same shape as shardkey>" },
zone: <string> | null
},
],
forceRedistribution: <bool>
}
)

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

フィールド
タイプ
説明

reshardCollection

string

リシャーディングするコレクションの名前空間。 形式は<database>.<collection>です。

key

ドキュメント

シャードキーとして使用する新しいフィールドを指定するドキュメント。

{ <field1>: <1|"hashed">, ... }

フィールド値を次のいずれかに設定します。

unique

ブール値

任意。 シャードキーに一意の制約があるかどうかを指定します。 falseのみがサポートされています。 デフォルトはfalseです。

unique: false 既存のユニーク制約は削除されません。再シャード化の前にコレクションに存在するユニークインデックスは、再シャード化操作が完了した後もユニークなままです。新しいシャードキーは、既存のユニークインデックスに対するユニークインデックスの要件を満たしている必要があります。

numInitialChunks

integer

任意。 コレクションを 再シャーディングする ときに、クラスター内のすべてのシャードにわたって作成するチャンクの初期数を指定します。 デフォルト値は 90 です。 次に、 MongoDB はクラスター全体でチャンクを作成し、バランスをとります。 numInitialChunks の結果は、シャードあたり 8192 未満である必要があります。

「提供されたシャードキーの濃度が十分でなく、必要な数のチャンクを作成できません」というエラーが表示された場合は、numInitialChunks 値を低くしてコレクションを再シャーディングします。

シャードキーにハッシュされたプレフィックスが含まれている場合、リシャーディング操作では numInitialChunks 設定は無視されます。代わりに、 MongoDB は、空のハッシュされたコレクションの最初のチャンク作成と同じアプローチを使用して、受信者間でハッシュされたキースペースを確定的に分割します。

numSamplesPerChunk

integer

任意.新しいチャンクでサンプルするドキュメントの数を指定します。デフォルトでは 、 MongoDB は各チャンクで 10 ドキュメントをサンプリングします。

バージョン8.0.20の新機能。

collation

ドキュメント

任意。 reshardCollectionで指定されたコレクションにデフォルトの照合がある場合は、 { locale : "simple" }を使用して照合ドキュメントを含める必要があります 。そうしないと、 reshardCollectionコマンドは失敗します。

zones

配列

任意。 コレクションの ゾーン を指定します。

ゾーン を維持または追加するには、コレクションの ゾーン を以下のように配列で指定します。

[
{
min: <document with same shape as shardkey>,
max: <document with same shape as shardkey>,
zone: <string> | null
},
...
]

forceRedistribution

ブール値

任意。 trueに設定されている場合、新しいシャードキーが古いシャードキーと同じであっても操作は実行されます。 データを特定のゾーンに移動するには、 zonesオプションとともに使用します。

バージョン8.0の新機能。

demoMode

ブール値

任意。リシャーディング操作を迅速に完了できるようになります。true に設定すると、demoMode は 5 分の最小リシャーディング操作期間をバイパスします。このパラメーターは、再シャーディング テストやデモンストレーションの目的で使用できます。

リシャーディング中に発生するインデックスビルドが、暗黙で失敗する可能性があります。

  • リシャーディング プロセスの実行中はインデックスを作成しないでください。

  • インデックスのビルドが進行中の場合は、リシャーディングプロセスを開始しないでください。

リシャーディングしているコレクションがMongoDB Search を使用している場合、リシャーディング操作の完了時に検索インデックスは使用できなくなります。再シャーディング操作が完了してから、検索インデックスを手動で再構築する必要があります。

  • If the collection uses Atlas Search, the search index becomes unavailable after the operation completes. To restore it, manually rebuild the search index.

  • Queryable 暗号化を使用するコレクションはサポートされていません。

コレクションの再シャーディング操作では、シャードは次のようになります。

シャードは同時にドナーでも受信者でもあることができます。

コンフィギュレーションサーバーのプライマリは常にリシャーディング コーディネーターであり、リシャーディング操作の各フェーズを開始します。

初期化フェーズ中に、リシャーディング コーディネーターはシャーディングされたコレクションの新しいデータ分散を決定します。

クローン フェーズ実行中:

  1. 各受信シャードは、ドナーのシャーディングされたコレクションと同じコレクションオプションを持つ、一時的な空のシャーディングされたコレクションを作成します。受信シャードは、インデックスフェーズまで _id 以外のインデックスを作成しません。

  2. 各受信シャードは、ドナーシャードからコレクションデータをクローンし、クローンされたデータを一時コレクションに書き込み (write)ます。この一時コレクションには、新しいシャードキーの下で受信シャードが所有するすべてのドキュメントが含まれます。

インデックスフェーズでは、各受信者シャードは必要な新しいインデックスをビルドします。 これらには、シャーディングされたコレクションの既存のすべてのインデックスと、新しいシャードキーパターン と互換性のあるインデックス(シャーディングされたコレクションにインデックスがまだ存在しない場合)が含まれます。

バージョン8.2で変更。

適用フェーズとキャッチアップフェーズ中:

  • 各受信者シャードは、受信者がデータをクローンした後に対応するドナー シャードに書込まれたoplogエントリの適用を開始します。

  • リシャーディング操作を完了するための残り時間の推定値が 500 ミリ秒 未満の場合、ドナー シャードはソースコレクションへの書込みをブロックします。

注意

必要に応じて、 commitReshardCollectionコマンドを発行すると、リシャーディング操作を手動で強制的に完了させることができます。 これは、再シャーディング操作を完了するための現在の推定時間がコレクションで書込みをブロックする許容期間である場合に有用です。 commitReshardCollectionコマンドは、書込みを早期にブロックし、リシャーディング操作を強制的に完了させます。 書込み (write) がブロックされている期間中、アプリケーションのレイテンシが増加します。

コミット フェーズ実行中:

  • リシャーディング コーディネーターは、すべてのシャードが厳密な一貫性に達するまで待機し、 リシャーディング操作 をコミットします。

  • リシャーディング コーディネーターは、各ドナー シャード プライマリと受信者シャード プライマリに対して、一時的にシャーディングされたコレクションの名前を変更するよう、個別に指示します。 一時的なコレクションは、新しいリシャーディングされたコレクションになります。

  • 各ドナー シャードは、古いシャーディングされたコレクションを削除します。

注意

リシャーディング プロセスがコミット フェーズに達すると、abortReshardCollection ではプロセスを終了できなくなります。

次の例では、 sales.ordersコレクションを新しいシャードキー{ order_id: 1 }で再シャーディングします。

db.adminCommand({
reshardCollection: "sales.orders",
key: { order_id: 1 }
})

出力:

{
ok: 1,
'$clusterTime': {
clusterTime: Timestamp(1, 1624887954),
signature: {
hash: Binary(Buffer.from("0000000000000000000000000000000000000000", "hex"), 0),
keyId: 0
}
},
operationTime: Timestamp(1, 1624887947)
}

MongoDB 8.0 以降では、同じキーでコレクションを再シャーディングできます。これを使用して、新しいシャードにデータを再配布できます。

クラスターにシャードを追加した後、 reshardCollectionコマンドとforceRedistributionオプションを併用して、クラスター全体にデータを再分散します。

db.adminCommand({
reshardCollection: "accounts.invoices",
key: { store_id: "hashed" },
forceRedistribution: true
})

MongoDB 8.0 以降では、 reshardCollection コマンドを使用して、シャードキー を変更せずにデータを新しいゾーンに移動できます。

次のコマンドは、同じシャードキーを使用して accounts.salesコレクションのデータを再配布し、ゾーン zone04 と zone05 に関連付けられているシャードにデータを移動します。

db.adminCommand({
reshardCollection: "accounts.sales",
key: { region_id: "hashed" },
forceRedistribution: true,
zones: [
{
zone: "zone04",
min: { region_id: MinKey() },
max: { region_id: 10 }
},
{
zone: "zone05",
min: { region_id: 10 },
max: { region_id: MaxKey() }
}
]
})