定義
sh.shardAndDistributeCollection(namespace, key, unique, options)提供されたシャードキーを使用してコレクションをシャーディングし、データをすぐに再配布します。 データを即座に再分散することで、データの移動がより速くなり、ワークロードへの影響を軽減できます。
重要
mongosh メソッド
このページでは、
mongoshメソッドが文書化されます。これは Node.js などの言語固有のドライバーのドキュメントではありません。MongoDB API ドライバーについては、各言語の MongoDB ドライバー ドキュメントを参照してください。
mongoshでsh.shardAndDistributeCollection()を実行すると、shardCollection} コマンドとreshardCollectionコマンドを連続実行中するのと同じ結果が得られます。
パラメーター
sh.shardAndDistributeCollection() は以下のパラメーターを取ります。
Parameter | タイプ | 必要性 | 説明 |
|---|---|---|---|
| 文字列 | 必須 | 形式 |
| ドキュメント | 必須 | シャードキー として使用するフィールドを指定するドキュメント。
フィールド値を次のいずれかに設定します。
|
| ブール値 | 任意 | 基礎のインデックスが一意の制約を強制するようにするには、 ハッシュされたシャードキーを使用する場合、 |
| ドキュメント | 任意 |
|
options 引数は以下のオプションをサポートしています。
Parameter | タイプ | 説明 |
|---|---|---|
| 整数 | コレクションを シャーディングおよび再シャーディング するときに、クラスター内のすべてのシャードにわたって作成するチャンクの初期数を指定します。次に、 MongoDB はクラスター全体でチャンクを作成し、バランスをとります。 |
| ドキュメント |
|
| ブール値 | コレクションに定義されたゾーンとゾーン範囲に基づいて、空または存在しないコレクションの初期チャンク作成と分散を実行するには、
|
| ドキュメント | 新しい シャーディングされ時系列コレクションを作成するには、このオプションを指定します。 既存の時系列コレクションをシャーディングするには、このパラメーターを省略します。
詳細な構文については「時系列オプション 」を参照してください。 |
Considerations
次の要因は、パフォーマンスやデータの分散に影響を与える可能性があります。
シャードキー
シャードキーは後でも変更できますが、スケーラビリティとパフォーマンスを最適化するために、シャードキーの選択を慎重に検討してください。
時系列コレクションのシャードキー
時系列コレクションをシャーディングする場合、シャードキーで指定できるのは次のフィールドのみです。
この
metaFieldサブフィールド
metaFieldこの
timeField
シャードキーでこれらのフィールドの組み合わせを指定できます。シャードキーのパターンでは、_id を含む他のフィールドは許可されません。
シャードキーを指定する場合には、次のいずれかです。
metaFieldまたはtimeFieldでなければなりません:シャードキーのパターン末尾
Tip
timeField だけをシャードキーとして指定することは避けてください。timeField は単調に増加するため、すべての書き込みがクラスター内の 1 つのチャンクで発生することがあります。理想的には、データをチャンク間で均等に分散します。
シャードキーを最適に選択する方法については、以下を参照してください。
ハッシュされたシャードキー
ハッシュされたシャードキーは、ハッシュされたインデックスまたはハッシュされた複合インデックスをシャードキーとして使用します。
ハッシュされたシャードキーフィールドを指定するには、 field: "hashed"を使用します。
注意
ハッシュされたシャードキー コレクションの作成中にチャンクの移行が進行中の場合、 バランサー がコレクションを自動的にバランス化するまでに、初期チャンク分散が不均一になる可能性があります。
ゾーン シャーディングと初期チャンク分散
シャードコレクション操作(つまり、 shardCollectionコマンドとsh.shardCollection()ヘルパー)は、コレクションにゾーンとゾーン範囲が定義されている場合、空または存在しないコレクションの最初のチャンク作成と分散を実行できます。 最初のチャンク分散により、 ゾーンシャーディングをより速く設定できます。 初期分散後、バランサーは通常どおりに今後のチャンク分散を管理します。
の例については、「空または存在しないコレクションのゾーンとゾーン範囲の事前定義」を参照してください。 範囲付きまたは単一フィールドのハッシュされたシャードキーを使用してコレクションをシャーディングする場合、空のコレクションに対してゾーンとゾーン範囲が定義されていると、 numInitialChunksオプションは効果がありません。
複合ハッシュ インデックス を使用してコレクションをシャードするには、複合ハッシュインデックスを使用した初期チャンク分散 を参照してください。
複合ハッシュされたインデックスを使用した初期チャンク分散
MongoDB は、ハッシュされた複合インデックスでのコレクションのシャーディングをサポートしています。 複合ハッシュされたシャードキーを使用して、空のコレクションまたは存在しないコレクションをシャーディングする場合、MongoDB が初期チャンクの作成と分散を実行するために追加の要件が適用されます。
空のコレクションにゾーンとゾーン範囲が定義され、かつpresplitHashedZonesがfalseの場合、 numInitialChunksオプションは効果がありません。
の例については、「空または存在しないコレクションのゾーンとゾーン範囲の事前定義 」を参照してください。
Tip
一意性
unique: trueを指定する場合は、 sh.shardAndDistributeCollection()を使用する前にインデックスを作成する必要があります。
シャードキーが プレフィックス である一意の 複合インデックス を持つことは可能ですが、unique パラメーターを使用する場合、コレクションにはシャードキー上のユニークインデックスが必要です。
照合
コレクションにデフォルトの照合がある場合、 sh.shardAndDistributeCollectionコマンドには{ locale: "simple" }の値を持つcollationパラメータが含まれている必要があります。 デフォルトの照合を使用する空でないコレクションの場合、フィールドがシャードキーパターンをサポートする単純照合のインデックスが少なくとも 1 つ必要です。
照合のないコレクションにはcollationオプションを指定する必要はありません。 照合のないコレクションに対して 照合オプションを指定しても、効果はありません。
書込み保証 (write concern)
mongosは、 コマンド、そのヘルパー"majority"shardCollectionsh.shardCollection() 、および メソッドの書込み保証( 書込み保証 sh.shardAndDistributeCollection()(write concern) )に を使用します。
例
次の例は、 sh.shardAndDistributeCollection()メソッドをオプション パラメータの有無にかかわらず使用する方法を示しています。
簡単な使い方
recordsという名前のデータベースにはpeopleという名前のコレクションが含まれています。 次のコマンドは、 zipcodeフィールドでコレクションをシャーディングし、 records.peopleコレクションのデータをすぐに再配布します。
sh.shardAndDistributeCollection("records.people", { zipcode: 1 } )
オプションで使用
phonebookデータベースには、デフォルトの照合 順序のないcontactsコレクションがあります。 次の例では、 sh.shardAndDistributeCollection()を使用してphonebook.contactsコレクションを次のようにシャーディングし、再配布します。
last_nameフィールドの ハッシュされたシャードキー。5最初のチャンク。simple「照合」を参照してください。
sh.shardAndDistributeCollection( "phonebook.contacts", { last_name: "hashed" }, false, { numInitialChunks: 5, collation: { locale: "simple" } } )