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

reshardCollection

項目一覧

  • 定義
  • 互換性
  • 構文
  • コマンドフィールド
  • Considerations
  • 再シャーディング プロセス
reshardCollection

バージョン 5.0 で追加

reshardCollectionコマンドは、コレクションのシャードキーを変更し、データの分散状況を変える。

Tip

mongoshでは、このコマンドは sh.reshardCollection()ヘルパー メソッドを通じて実行することもできます。

ヘルパー メソッドはmongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。

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

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

注意

このコマンドは、すべての MongoDB Atlas クラスターでサポートされています。すべてのコマンドに対する Atlas のサポートについては、「サポートされていないコマンド」を参照してください。

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

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

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

db.adminCommand(
{
reshardCollection: "<database>.<collection>",
key: <shardkey>,
unique: <boolean>,
numInitialChunks: <integer>,
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です。

numInitialChunks

integer

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

collation

ドキュメント

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

zones

配列

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

forceRedistribution

ブール値

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

バージョン8.0の新機能

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

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

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

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

シャードは同時にドナーでも受信者でもあることができます。 ゾーン を使用する場合を除き、ドナー シャードのセットは受信者シャードと同じです。

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

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

インデックスフェーズ中:

  • シャード受信者ごとに、既存のシャーディングされたコレクションと同じコレクション オプションを持つ、新しい空のシャーディングされたコレクションが作成されます。 このシャーディングされたコレクションは、受信者が新しいデータを書き込むシャーディングされたコレクションのターゲットです。

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

クローン、適用、キャッチアップ フェーズ中に、以下を実行します。

  • 各シャード受信者は、新しいシャードキーの下に所有するドキュメントの最初のコピーを複製します。

  • 各シャード受信者は、受信者がデータをクローンした後に発生した操作からの oplog エントリの適用を開始します。

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

    注意

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

  • リシャーディング プロセスがコミット フェーズに達すると、 abortReshardCollection中止されなくなります。

  • すべてのシャードが厳密な一貫性に達すると、リシャーディング コーディネーターはリシャーディング操作をコミットし、新しいルーティング テーブルをインストールします。

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

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

    Tip

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

次の例では、 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)
}

Tip

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

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

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

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

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

次のコマンドは、同じシャードキーを使用してaccounts.salesコレクションのデータを再分配し、ゾーンzone01zone02からzone03zone04にデータを移動します。

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() }
}
]
})

戻る

deleteShardFromZone