定義
sh.shardCollection(namespace, key, unique, options)keyをシャードキーとして使用してコレクションをシャーディングします。シャードキーは、MongoDB がコレクションのドキュメントをシャード間でどのように分散するかを決定します。注意
バージョン6.0で変更。
MongoDB 6.0 以降では、コレクションをシャーディングする場合、最初に
sh.enableSharding()メソッドを実行してデータベースを構成する必要はありません。重要
mongosh メソッド
This page documents a
mongoshmethod. This is not the documentation for database commands or language-specific drivers, such as Node.js.データベースコマンドについては、
shardCollectionコマンドを参照してください。MongoDB API ドライバーについては、各言語の「MongoDB ドライバーのドキュメント」を参照してください。
sh.shardCollection()以下の引数を取ります。Parameterタイプ説明namespacestring
"<database>.<collection>"形式でシャーディングするコレクションの名前空間。keyドキュメント
シャードキー として使用するフィールドを指定するドキュメント。
{ <field1>: <1|"hashed">, ... }フィールド値を次のいずれかに設定します。
1、範囲ベースのシャーディング用"hashed"ハッシュされたシャードキーを指定します。
シャードキーはインデックスでサポートされている必要があります。コレクションが空でない限り、
shardCollectionコマンドの前にインデックスが存在している必要があります。コレクションが空の場合、シャードキーをサポートできるインデックスがまだ存在しない場合には、MongoDB はコレクションをシャーディングする前にインデックスを作成します。「シャードキー インデックス」も参照してください
uniqueブール値
任意。基礎のインデックスがユニーク制約を強制するようにするには、
trueを指定します。デフォルトはfalseです。ハッシュされたシャードキーを使用する場合、
trueは指定できません。optionsドキュメントを指定する場合は、uniqueの値を明示的に指定する必要があります。optionsドキュメント
任意。
numInitialChunksやcollationなどの任意フィールドを含むドキュメント。options引数は以下のオプションをサポートしています。Parameterタイプ説明numInitialChunksinteger
任意。空のコレクションをハッシュされたシャードキーでシャーディングするときに最初に作成するチャンクの最小数を指定します。次に、MongoDB はクラスター全体でチャンクを作成し、バランスをとります。
numInitialChunksパラメーターは、シャードあたり8192チャンク未満である必要があります。デフォルトはシャードあたり2チャンク。コレクションが空でない場合、またはシャードキーにハッシュされたフィールドが含まれていない場合、操作はエラーを返します。
If sharding with presplitHashedZones: true, MongoDB attempts to evenly distribute the specified number of chunks across the zones in the cluster.
If sharding with presplitHashedZones: false or omitted and no zones and zone ranges are defined for the empty collection, MongoDB attempts to evenly distributed the specified number of chunks across the shards in the cluster.
If sharding with presplitHashedZones: false or omitted and zones and zone ranges have been defined for the empty collection,
numInitChunkshas no effect.
collationドキュメント
任意。
shardCollectionに指定されたコレクションにデフォルトの照合がある場合は、``{ locale : "simple" }`` を使用して照合ドキュメントを含める必要があります。そうしないと、shardCollectionコマンドは失敗します。フィールドがシャードキー パターンをサポートするインデックスの少なくとも 1 つには、単純照合が必要です。ブール値
任意。 コレクションに定義されたゾーンとゾーン範囲に基づいて、空または存在しないコレクションの初期チャンク作成と分散を実行するには、
trueを指定します。 ハッシュされたシャーディングのみ。shardCollection()次のいずれかに当てはまる場合、presplitHashedZones: trueと はエラーを返します。シャードキーにはハッシュされたフィールドが含まれていません(単一フィールド ハッシュされたインデックスまたはハッシュされた複合インデックス ではない)。
コレクションには、定義されたゾーンまたはゾーン範囲はありません。
定義されたゾーン範囲が要件を満たしていません。
ドキュメント
任意。 新しいシャーディングされた時系列コレクションを作成するには、このオプションを指定します。
既存の時系列コレクションをシャーディングするには、このパラメーターを省略します。
shardCollectionに指定されたコレクションが時系列コレクションで、かつtimeseriesオプションが指定されていない場合、MongoDB は既存の時系列コレクションを定義する値を使用してtimeseriesフィールドに入力します。For detailed syntax, see Time Series Options.
時系列オプション
バージョン5.1の新機能。
To create a new time series collection that is sharded, specify the timeseries option to sh.shardCollection().
timeseries オプションには次のフィールドが含まれます。
互換性
このメソッドは、次の環境でホストされている配置で使用できます。
- MongoDB Atlas はクラウドでの MongoDB 配置のための完全管理サービスです
重要
このコマンドは、M0 および Flex クラスターではサポートされていません。詳細については、サポートされていないコマンド を参照してください。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
Considerations
MongoDB には、いったんシャーディングされたコレクションで、シャーディングを解除するメソッドがありません。
シャードキー
シャードキーは後でも変更できますが、スケーラビリティやパフォーマンスの問題を回避するために、シャードキーの選択を慎重にすることが重要になります。
時系列コレクションのシャードキー
時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。
この
metaFieldサブフィールド
metaFieldこの
timeField
シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id を含む他のフィールドは許可されません。
シャードキーを指定する場合には、次のいずれかです。
metaFieldまたはtimeFieldでなければなりません:シャードキーのパターン末尾
Tip
timeField だけをシャードキーとして指定することは避けてください。timeField は単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。
シャードキーを最適に選択する方法については、以下を参照してください。
ハッシュされたシャードキー
ハッシュされたシャードキーは、ハッシュされたインデックスまたはハッシュされた複合インデックスをシャードキーとして使用します。
ハッシュされたシャードキー フィールドを指定するには、 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オプションは効果がありません。
複合ハッシュ インデックスを使用してコレクションをシャードするには、複合ハッシュ インデックスを使用した初期チャンク分散を参照してください。
複合ハッシュされたインデックスを使用した初期チャンク分散
MongoDB は、ハッシュされた複合インデックスでのコレクションのシャーディングをサポートしています。 複合ハッシュされたシャードキーを使用して、空のコレクションまたは存在しないコレクションをシャーディングする場合、MongoDB が初期チャンクの作成と分散を実行するために追加の要件が適用されます。
The numInitialChunks option has no effect if zones and zone ranges have been defined for the empty collection and presplitHashedZones is false.
例については、「 空または存在しないコレクションのゾーンとゾーン範囲の事前定義」を参照してください。
Tip
一意性
unique: trueを指定する場合
If the collection is empty,
sh.shardCollection()creates the unique index on the shard key if such an index does not already exist.If the collection is not empty, you must create the index first before using
sh.shardCollection().
シャードキーがプレフィックスであるユニーク複合インデックスを持つことは可能ですが、unique パラメーターを使用する場合、コレクションにはシャードキー上のユニークインデックスが必要です。
「シャーディングされたコレクションと一意のインデックス」も参照してください
照合
If the collection has a default collation, the sh.shardCollection() command must include a collation parameter with the value { locale: "simple" }. For non-empty collections with a default collation, you must have at least one index with the simple collation whose fields support the shard key pattern.
照合のないコレクションにはcollationオプションを指定する必要はありません。 照合のないコレクションに対して 照合オプションを指定しても、効果はありません。
書込み保証 (write concern)
mongos uses "majority" for the write concern of the shardCollection command and its helper sh.shardCollection().
例
簡単な使い方
records という名前のデータベースに people という名前のコレクションがある場合、次のコマンドは zipcode フィールドでコレクションをシャーディングします。
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:
last_nameフィールドのハッシュされたシャードキー、5初期チャンク、simpleの照合。
sh.shardCollection( "phonebook.contacts", { last_name: "hashed" }, false, { numInitialChunks: 5, collation: { locale: "simple" } } )