定義
shardCollectionコレクションをシャーディングして、そのドキュメントをシャード全体に分散します。
shardCollectionコマンドはadminデータベースに対して実行する必要があります。注意
バージョン 6.0 での変更。
MongoDB 6.0 以降では、コレクションをシャーディングする場合、データベースを構成するために最初に
enableShardingコマンドを実行する必要は ありませ ん 。Tip
mongoshでは、このコマンドはsh.shardCollection()ヘルパー メソッドを通じて実行することもできます。ヘルパー メソッドは
mongoshユーザーには便利ですが、データベースコマンドと同じレベルの情報は返されない可能性があります。 便宜上必要ない場合、または追加の戻りフィールドが必要な場合は、 データベースコマンドを使用します。
互換性
このコマンドは、次の環境でホストされている配置で使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
shardCollectionを実行するには、 db.runCommand( { <command> } )メソッドを使用します。
コマンドの形式は次のとおりです。
db.adminCommand( { shardCollection: "<database>.<collection>", key: { <field1>: <1|"hashed">, ... }, unique: <boolean>, numInitialChunks: <integer>, presplitHashedZones: <boolean>, collation: { locale: "simple" }, timeseries: <object> } )
コマンドフィールド
このコマンドは、次のフィールドを使用します。
フィールド | タイプ | 説明 |
|---|---|---|
| string |
|
| ドキュメント | シャードキー として使用するフィールドを指定するドキュメント。
フィールド値を次のいずれかに設定します。
シャードキーはインデックスでサポートされている必要があります。コレクションが空でない限り、 「シャードキー インデックス」も参照してください |
| ブール値 | 基礎のインデックスが一意の制約を強制するようにするには、 ハッシュされたシャードキーを使用する場合、 |
| integer | 空のコレクションをハッシュされたシャードキーでシャーディングするときに、クラスター内のすべてのシャードにわたって作成するチャンクの初期数を指定します。 次に、MongoDB はクラスター全体でチャンクを作成し、バランスをとります。 コレクションが空でない場合、またはシャードキーにハッシュされたフィールドが含まれていない場合、操作はエラーを返します。
|
| ドキュメント | 任意。 |
ブール値 | 任意。 コレクションに定義されたゾーンとゾーン範囲に基づいて、空または存在しないコレクションの初期チャンク作成と分散を実行するには、
| |
オブジェクト | 任意。 新しいシャーディングされた時系列コレクションを作成するには、このオプションを指定します。 既存の時系列コレクションをシャーディングするには、このパラメーターを省略します。
詳細な構文については「時系列オプション 」を参照してください。 バージョン 5.1 で追加。 |
時系列オプション
バージョン 5.1 で追加。
シャーディングされた新しい時系列コレクションを作成するには、 timeseriesオプションをshardCollectionに指定します。
timeseriesオプションは、次のフィールドがあります。
フィールド | タイプ | 説明 |
|---|---|---|
| string | 必須。各時系列ドキュメントの日付を含むフィールドの名前。 時系列コレクション内のドキュメントには、 |
| string | オプション。各時系列ドキュメントのメタデータを含むフィールドの名前。指定されたフィールドのメタデータは、ユニークな一連のドキュメントにラベルを付けるために使用されるデータでなければなりません。メタデータは、変更されることはほとんどありません。 指定されたフィールドの名前は |
| string | 任意。可能な値は次のとおりです。
デフォルトでは、MongoDB は高頻度の取り込みの場合、 時系列コレクション内のデータが内部的に保存される方法を最適化してパフォーマンスを向上させるには、
|
Considerations
シャードキー
シャードキーは後でも変更できますが、スケーラビリティやパフォーマンスの問題を回避するために、シャードキーの選択を慎重にすることが重要になります。
時系列コレクションのシャードキー
時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。
この
metaFieldサブフィールド
metaFieldこの
timeField
シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id を含む他のフィールドは許可されません。
シャードキーを指定する場合には、次のいずれかです。
metaFieldまたはtimeFieldでなければなりません:シャードキーのパターン末尾
Tip
timeField だけをシャードキーとして指定することは避けてください。timeField は単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。
シャードキーを最適に選択する方法については、以下を参照してください。
ハッシュされたシャードキー
ハッシュされたシャードキーは、ハッシュされたインデックスまたはハッシュされた複合インデックスをシャードキーとして使用します。
ハッシュされたシャードキー フィールドを指定するには、 field: "hashed"の形式を使用します。
注意
ハッシュされたシャードキー コレクションの作成中にチャンクの移行が進行中の場合、 バランサー がコレクションを自動的にバランス化するまでに、初期チャンク分散が不均一になる可能性があります。
ゾーン シャーディングと初期チャンク分散
シャード コレクション操作(つまり、 shardCollectionコマンドとsh.shardCollection()ヘルパー)は、コレクションにゾーンとゾーン範囲が定義されている場合、空または存在しないコレクションの最初のチャンク作成と分散を実行できます。 最初のチャンク分散により、ゾーン シャーディングをより速く設定できます。 初期分散後、バランサーは通常どおりに今後のチャンク分散を管理します。
例については、「 空または存在しないコレクションのゾーンとゾーン範囲の事前定義」を参照してください。 範囲指定または単一フィールドのハッシュされたシャードキーを使用してコレクションをシャーディングする場合、空のコレクションに対してゾーンとゾーン範囲が定義されていると、 numInitialChunksオプションは効果がありません。
ハッシュされた複合インデックス を使用してコレクションをシャードするには、「 ゾーンのシャーディング 」と 「 複合ハッシュされたインデックス 」を参照してください。
ゾーンシャーディングと複合ハッシュされたインデックス
MongoDB は、ハッシュされた複合インデックスでのコレクションのシャーディングをサポートしています。 複合ハッシュされたシャードキーを使用して、空のコレクションまたは存在しないコレクションをシャーディングする場合、MongoDB が初期チャンクの作成と分散を実行するために追加の要件が適用されます。
空のコレクションにゾーンとゾーン範囲が定義され、かつ presplitHashedZones が false の場合、numInitialChunks オプションは効果がありません。
例については、「 空または存在しないコレクションのゾーンとゾーン範囲の事前定義」を参照してください。
一意性
unique: trueを指定する場合
コレクションが空の場合、
shardCollectionはシャードキーに一意なインデックスがなければそれを作成します。コレクションが空でない場合、
shardCollectionを使用する前に、まずインデックスを作成する必要があります。
シャードキーがプレフィックスであるユニーク複合インデックスを持つことは可能ですが、unique パラメーターを使用する場合、コレクションにはシャードキー上のユニークインデックスが必要です。
「シャーディングされたコレクションと一意のインデックス」も参照してください
照合
バージョン 3.4 で変更。
コレクションにデフォルトの照合がある場合、shardCollection コマンドには { locale: "simple" } の値を持つ collation パラメーターが含まれている必要があります。デフォルトの照合を使用する空でないコレクションの場合、フィールドがシャードキー パターンをサポートする単純照合のインデックスが少なくとも 1 つ必要です。
照合のないコレクションにはcollationオプションを指定する必要はありません。 照合のないコレクションに対して 照合オプションを指定しても、効果はありません。
書込み保証 (write concern)
mongosは、 コマンドとそのヘルパー"majority" shardCollectionの書込み保証( write concernsh.shardCollection() )に使用します。
例
次の操作は、 recordsデータベース内のpeopleコレクションのシャーディングを有効にし、 zipcodeフィールドをシャードキーとして使用します。
db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )