AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

sh.shardAndDistributeCollection()(mongoshメソッド)

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

ドキュメント

必須

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

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

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

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

unique

ブール値

任意

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

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

options

ドキュメント

任意

numInitialChunks や collation などの任意フィールドを含むドキュメント。

options 引数は以下のオプションをサポートしています。

Parameter
タイプ
説明

numInitialChunks

整数

コレクションを シャーディングおよび再シャーディング するときに、クラスター内のすべてのシャードにわたって作成するチャンクの初期数を指定します。次に、 MongoDB はクラスター全体でチャンクを作成し、バランスをとります。numInitialChunks パラメータの結果は、シャードあたり 8192 未満である必要があります。シャードあたりのデフォルトのチャンク数は 90 です。

シャードキーにハッシュされたプレフィックスが含まれている場合、リシャーディング操作では numInitialChunks 設定は無視されます。代わりに、 MongoDB は、空のハッシュされたコレクションの最初のチャンク作成と同じアプローチを使用して、受信者間でハッシュされたキースペースを確定的に分割します。

collation

ドキュメント

shardAndDistributeCollection()に指定されたコレクションにデフォルトの照合がある場合は、 { locale : "simple" }を使用して照合ドキュメントを含める必要があります 。そうしないと、 shardAndDistributeCollection()メソッドは失敗します。

presplitHashedZones

ブール値

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

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

timeseries

ドキュメント

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

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

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

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

次の要因は、パフォーマンスやデータの分散に影響を与える可能性があります。

シャードキーは後でも変更できますが、スケーラビリティとパフォーマンスを最適化するために、シャードキーの選択を慎重に検討してください。

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

  • この metaField

  • サブフィールド metaField

  • この timeField

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

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

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オプションを指定する必要はありません。 照合のないコレクションに対して 照合オプションを指定しても、効果はありません。

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" } })