Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

sh.shardAndDistributeCollection()

項目一覧

  • 定義
  • パラメーター
  • Considerations
  • 詳細
sh.shardAndDistributeCollection(namespace, key, unique, options)

提供されたシャードキーを使用してコレクションをシャーディングし、データをすぐに再配布します。 データを即座に再分散することで、データの移動がより速くなり、ワークロードへの影響を軽減できます。

重要

mongosh メソッド

このページでは、 mongosh メソッドが文書化されます。これは Node.js などの言語固有のドライバーのドキュメントではありません

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

mongoshsh.shardAndDistributeCollection()を実行すると、 shardCollection } コマンドとreshardCollectionコマンドを連続実行中するのと同じ結果が得られます。

sh.shardAndDistributeCollection() は以下のパラメーターを取ります。

Parameter
タイプ
必要性
説明
namespace
文字列
必須
形式"<database>.<collection>"でシャーディングするコレクションの名前空間
key
ドキュメント
必須

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

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

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

  • 1範囲ベースのシャーディング

  • "hashed" ハッシュされたシャードキーを指定します。

    シャードキーはインデックスでサポートされている必要があります。 shardAndDistributeCollection()メソッドを実行する前にインデックスが存在する必要があります。

    Tip

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

unique
ブール値
任意

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

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

options
ドキュメント
任意
numInitialChunkscollation などの任意フィールドを含むドキュメント。

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

Parameter
タイプ
説明
numInitialChunks
整数
コレクションをシャーディングおよび再シャーディング するときに、クラスター内のすべてのシャードにわたって作成するチャンクの初期数を指定します。 次に、 MongoDBはクラスター全体でチャンクを作成し、バランスをとります。 numInitialChunksパラメータの結果は、シャードあたり8192未満である必要があります。 デフォルトはシャードあたり1000チャンク。
collation
ドキュメント
shardAndDistributeCollection()に指定されたコレクションにデフォルトの照合がある場合は、 { locale : "simple" }を使用して照合ドキュメントを含める必要があります 。そうしないと、 shardAndDistributeCollection()メソッドは失敗します。
presplitHashedZones
ブール値

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

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

timeseries
ドキュメント

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

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

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

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

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

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

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

  • この metaField

  • サブフィールド metaField

  • この timeField

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

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

Tip

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

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

Tip

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

ハッシュされたシャードキーは、ハッシュされたインデックスまたはハッシュされた複合インデックスをシャードキーとして使用します。

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

注意

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

Tip

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

シャードコレクション操作(つまり、 shardCollectionコマンドとsh.shardCollection()ヘルパー)は、コレクションにゾーンとゾーン範囲が定義されている場合、空または存在しないコレクションの最初のチャンク作成と分散を実行できます。 最初のチャンク分散により、 ゾーンシャーディングをより速く設定できます。 初期分散後、バランサーは通常どおりに今後のチャンク分散を管理します。

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

複合ハッシュ インデックス を使用してコレクションをシャードするには、複合ハッシュインデックスを使用した初期チャンク分散 を参照してください。

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

空のコレクションにゾーンとゾーン範囲が定義され、かつpresplitHashedZonesfalseの場合、 numInitialChunksオプションは効果がありません。

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

Tip

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

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

戻る

sh.setBalancerState