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

shardCollection

項目一覧

  • 定義
  • 互換性
  • 構文
  • コマンドフィールド
  • Considerations
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>
}
)

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

フィールド
タイプ
説明
shardCollection
string
<database>.<collection>形式でシャーディングするコレクションの名前空間
key
ドキュメント

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

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

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

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

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

unique
ブール値

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

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

numInitialChunks
integer

空のコレクションをハッシュされたシャードキーでシャーディングするときに、クラスター内のすべてのシャードにわたって作成するチャンクの初期数を指定します。 次に、MongoDB はクラスター全体でチャンクを作成し、バランスをとります。 numInitialChunksの結果は、シャードあたり8192未満である必要があります。

コレクションが空でない場合、またはシャードキーにハッシュされたフィールドが含まれていない場合、操作はエラーを返します。

  • presplitHashedZones: trueでシャーディングする場合、MongoDB は指定された数のチャンクをクラスター内のゾーン全体に均等に分散しようとします。

  • presplitHashedZones: falseまたは省略でシャーディングし、空のコレクションにゾーンとゾーン範囲が定義されていない場合、MongoDB は指定された数のチャンクをクラスター内のシャード全体に均等に分散しようとします。

  • presplitHashedZones: false または省略でシャーディングし、空のコレクションに対してゾーンとゾーン範囲が定義されている場合、numInitialChunks は効果がありません。

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 パラメーターは設定できません。

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

Tip

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

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

  • この metaField

  • サブフィールド metaField

  • この timeField

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

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

Tip

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

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

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

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

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

注意

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

Tip

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

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

例については、「 空または存在しないコレクションのゾーンとゾーン範囲の事前定義」を参照してください。 範囲指定または単一フィールドのハッシュされたシャードキーを使用してコレクションをシャーディングする場合、空のコレクションに対してゾーンとゾーン範囲が定義されていると、 numInitialChunksオプションは効果がありません。

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

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

空のコレクションにゾーンとゾーン範囲が定義され、かつ presplitHashedZonesfalse の場合、numInitialChunks オプションは効果がありません。

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

Tip

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

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