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