Docs Menu
Docs Home
/ /

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

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>,
presplitHashedZones: <boolean>,
collation: { locale: "simple" },
timeseries: <object>
}
)

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

フィールド
タイプ
説明

shardCollection

string

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

key

ドキュメント

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

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

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

シャードキーはインデックスでサポートされている必要があります。コレクションが空でない限り、shardCollection コマンドの前にインデックスが存在している必要があります。コレクションが空の場合、シャードキーをサポートできるインデックスがまだ存在しない場合には、MongoDB はコレクションをシャーディングする前にインデックスを作成します。

シャードキー インデックス」も参照してください

unique

ブール値

基礎のインデックスが一意の制約を強制するようにするには、true を指定します。デフォルトは false です。

ハッシュされたシャードキーを使用する場合、 trueは指定できません。

collation

ドキュメント

任意。 shardCollectionに指定されたコレクションにデフォルトの照合がある場合は、 { locale : "simple" }を使用して照合ドキュメントを含める必要があります 。そうしないと、 shardCollectionコマンドは失敗します。 フィールドがシャードキー パターンをサポートするインデックスの少なくとも 1 つには、単純照合が必要です。

ブール値

任意。 コレクションに定義されたゾーンとゾーン範囲に基づいて、空または存在しないコレクションの初期チャンク作成と分散を実行するには、 trueを指定します。 ハッシュされたシャーディングのみ。

shardCollection 次のいずれかに当てはまる場合、 presplitHashedZones: trueと はエラーを返します。

オブジェクト

任意。 新しいシャーディングされた時系列コレクションを作成するには、このオプションを指定します。

既存の時系列コレクションをシャーディングするには、このパラメーターを省略します。

shardCollectionに指定されたコレクションが時系列コレクションで、かつtimeseriesオプションが指定されていない場合、MongoDB は既存の時系列コレクションを定義する値を使用してtimeseriesフィールドに入力します。

詳細な構文については「時系列オプション 」を参照してください。

バージョン 5.1 で追加

バージョン 5.1 で追加

シャーディングされた新しい時系列コレクションを作成するには、 timeseriesオプションをshardCollectionに指定します。

timeseriesオプションは、次のフィールドがあります。

フィールド
タイプ
説明

timeField

string

必須。各時系列ドキュメントの日付を含むフィールドの名前。 時系列コレクション内のドキュメントには、 timeFieldの値として有効な BSON 日付が必要です。

警告: MongoDB 以降、時系列コレクションでシャードキーとして8.0 timeFieldを使用することは非推奨になっています。

metaField

string

任意。各時系列ドキュメントのメタデータを含むフィールドの名前。指定されたフィールドのメタデータは、一意の時系列ドキュメントにラベルを付けるために使用されるデータでなければなりません。メタデータを変更する必要はめったにありません。指定されたフィールドの名前を _id または timeseries.timeField と同じ名前にはできません。フィールドは任意のデータ型に指定できます。

metaFieldフィールドは任意ですが、メタデータを使用するとクエリの最適化が向上します。 たとえば、MongoDB metaFieldtimeFieldは新しいコレクションの フィールドと フィールドに 複合インデックス を自動的に作成します 。このフィールドに値を指定しない場合、データは時間のみに基づいてバケット化されます。

granularity

string

任意。可能な値は次のとおりです。

  • "seconds"

  • "minutes"

  • "hours"

デフォルトでは、MongoDB は高頻度の取り込みの場合、 granularity"seconds"に設定します。

時系列コレクション内のデータが内部的に保存される方法を最適化してパフォーマンスを向上させるには、 granularityパラメーターを手動で設定します。 granularityの値を選択するには、連続する受信測定値間の時間範囲に最も近い一致を選択します。

timeseries.metaFieldを指定する場合は、 metaFieldフィールドに同じ一意の値を持つ連続した受信測定値間の時間範囲を考慮してください。 測定値は、同じソースから取得された場合、多くの場合、 metaFieldフィールドの一意の値と同じ値になります。

timeseries.metaFieldを指定しない場合は、コレクションに挿入されるすべての測定値間の時間範囲を考慮してください。

granularityパラメーターを設定した場合、bucketMaxSpanSeconds パラメーターとbucketRoundingSeconds パラメーターは設定できません。

シャードキーは後でも変更できますが、スケーラビリティやパフォーマンスの問題を回避するために、シャードキーの選択を慎重にすることが重要になります。

時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。

  • この metaField

  • サブフィールド metaField

  • この timeField

シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id を含む他のフィールドは許可されません。

シャードキーを指定する場合には、次のいずれかです。

Tip

timeField だけをシャードキーとして指定することは避けてください。timeField単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。

シャードキーを最適に選択する方法については、以下を参照してください。

警告

MongoDB 8.0 以降、timeField を含むシャードキーは時系列コレクションでは非推奨になります。

ハッシュされたシャードキーは、ハッシュされたインデックスまたはハッシュされた複合インデックスをシャードキーとして使用します。

ハッシュされたシャードキー フィールドを指定するには、 field: "hashed"の形式を使用します。

注意

ハッシュされたシャードキー コレクションの作成中にチャンクの移行が進行中の場合、 バランサー がコレクションを自動的にバランス化するまでに、初期チャンク分散が不均一になる可能性があります。

shardCollection コマンドを実行すると、バランサークラスター内の他のシャードへのコレクションデータの分散が開始されます。単一のシャードが一度に参加できるチャンクの移行は 1 つだけです。MongoDBがあるシャードから別のシャードにデータ範囲のコピーが成功すると、ドナー シャードの範囲は 範囲削除 によって削除対象としてマークされます。このプロセスは遅く、リソースを集中的に消費します。

MongoDB8.0 以降では、配置がリソース要件 を満たしている場合は、reshardCollection コマンドを使用して、同じキーに再シャーディングしてデータの初期バランシングを実行することをお勧めします。これにより、 MongoDB はバランサーを待たずにシャード間でデータを再バランス化します。

reshardCollection コマンドを使用して初期バランシングを実行するには、次のようにします。

  1. コレクションをシャーディングされたコレクションとして構成するには、shardCollection コマンドを使用します。

  2. reshardCollection コマンドを使用して、forceRedistribution オプションを true に設定して、同じシャードキーに再シャーディングします。次に、 MongoDB はシャード間でデータのバランスをとります。

詳細については、「同じシャードキーへの再シャーディング」を参照してください。

シャード コレクション操作(つまり、 shardCollectionコマンドとsh.shardCollection()ヘルパー)は、コレクションにゾーンとゾーン範囲が定義されている場合、空または存在しないコレクションの最初のチャンク作成と分散を実行できます。 最初のチャンク分散により、ゾーン シャーディングをより速く設定できます。 初期分散後、バランサーは通常どおりに今後のチャンク分散を管理します。

ハッシュされた複合インデックス を使用してコレクションをシャードするには、「 ゾーンのシャーディング 」と 「 複合ハッシュされたインデックス 」を参照してください。

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

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

unique: trueを指定する場合

シャードキーがプレフィックスであるユニーク複合インデックスを持つことは可能ですが、unique パラメーターを使用する場合、コレクションにはシャードキー上のユニークインデックスが必要です。

シャーディングされたコレクションと一意のインデックス」も参照してください

コレクションにデフォルトの照合がある場合、shardCollection コマンドには { locale: "simple" } の値を持つ collation パラメーターが含まれている必要があります。デフォルトの照合を使用する空でないコレクションの場合、フィールドがシャードキー パターンをサポートする単純照合のインデックスが少なくとも 1 つ必要です。

照合のないコレクションにはcollationオプションを指定する必要はありません。 照合のないコレクションに対して 照合オプションを指定しても、効果はありません。

mongosは、 コマンド、そのヘルパー"majority"shardCollectionsh.shardCollection() 、および メソッドの書込み保証( 書込み保証 sh.shardAndDistributeCollection()(write concern) )に を使用します。

次の操作は、 recordsデータベース内のpeopleコレクションのシャーディングを有効にし、 zipcodeフィールドをシャードキーとして使用します。

db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )

戻る

setAllowMigrations

項目一覧