Docs Menu

sh.shardCollection()

sh.shardCollection(namespace, key, unique, options)

Shards a collection using the key as a the シャードキー. The shard key determines how MongoDB distributes the collection's documents among the shards.

注意

バージョン 6.0 での変更

Starting in MongoDB 6.0, sharding a collection does ではない require you to first run the sh.enableSharding() method to configure the database.

重要

mongosh メソッド

このページでは、mongosh メソッドについて記載しています。ただし、データベースコマンドや Node.js などの言語固有のドライバーのドキュメントには該当しません

データベースコマンドについては、shardCollection コマンドを参照してください。

MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。

sh.shardCollection() takes the following arguments:

Parameter
タイプ
説明

namespace

string

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

key

ドキュメント

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

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

Set the field value to either:

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

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

unique

ブール値

Optional. Specify true to ensure that the underlying index enforces a unique constraint. Defaults to false.

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

For レガシー mongo shell, you must explicitly specify the value for unique if you specify the options document. mongosh doesn't require unique when you specify the options document.

options

ドキュメント

Optional. A document containing optional fields, including numInitialChunks and collation.

The options argument supports the following options:

Parameter
タイプ
説明

numInitialChunks

integer

Optional. Specifies the minimum number of chunks to create initially when sharding an empty collection with a ハッシュされたシャードキー. MongoDB then creates and balances chunks across the cluster. The numInitialChunks parameter must be less than 8192 chunks per shard. Defaults to 2 chunks per shard.

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

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

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

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

collation

ドキュメント

Optional. If the collection specified to shardCollection has a default collation, you must include a collation document with``{ locale : "simple" }``, or the shardCollection command fails. At least one of the indexes whose fields support the shard key pattern must have the simple collation.

ブール値

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

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

ドキュメント

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

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

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

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

バージョン 5.1 で追加

To create a new 時系列コレクション that is sharded, specify the 時系列 option to sh.shardCollection().

The 時系列 option takes the following fields:

フィールド
タイプ
説明

timeField

string

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

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

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

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

重要

このコマンドは、M0、M2、M5、および Flex クラスターではサポートされていません。詳細については、「 サポートされていないコマンド 」を参照してください。

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

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

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

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

  • metaField

  • metaField のサブフィールド

  • timeField

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

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

Tip

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

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

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

Hashed shard keys use a hashed index or a compound hashed index as the shard key.

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

注意

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

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

The shard collection operation (i.e. shardCollection command and the sh.shardCollection() helper) can perform initial chunk creation and distribution for an empty or a non-existing collection if zones and zone ranges have been defined for the collection. Initial chunk distribution allows for a faster setup of zoned sharding. After the initial distribution, the balancer manages the chunk distribution going forward per usual.

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

To shard a collection using a compound hashed index, see Initial Chunk Distribution with Compound Hashed Indexes.

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

The numInitialChunks option has no effect if zones and zone ranges have been defined for the empty collection and presplitHashedZones is false.

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

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

unique: trueを指定する場合

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

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

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

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

mongos uses "majority" for the 書込み保証 (write concern) of the shardCollection command, its helper sh.shardCollection(), and the sh.shardAndDistributeCollection() method.

Given a collection named people in a database named records, the following command shards the collection by the zipcode field:

sh.shardCollection("records.people", { zipcode: 1 } )

The phonebook database has a collection contacts with no default collation. The following example uses sh.shardCollection() to shard the phonebook.contacts with:

sh.shardCollection(
"phonebook.contacts",
{ last_name: "hashed" },
false,
{
numInitialChunks: 5,
collation: { locale: "simple" }
}
)

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