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

sh.shardCollection()

項目一覧

  • 定義
  • 互換性
  • Considerations
sh.shardCollection(namespace, key, unique, options)

key シャードキーとして使用し、コレクションをシャードします。シャードキーで、MongoDB がコレクションのドキュメントをシャード間でどのように配布するかを決定します。

注意

バージョン 6.0 での変更

MongoDB 6.0 以降では、コレクションをシャーディングする場合、最初に sh.enableSharding() メソッドを実行してデータベースを構成する必要はありません

重要

mongosh メソッド

このページでは、mongosh メソッドについて説明します。ただし、データベースコマンドや Node.js などの言語固有のドライバーのドキュメントには該当しません

データベースコマンドについては、shardCollection コマンドを参照してください。

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

sh.shardCollection() 以下の引数を取ります。

Parameter
タイプ
説明

namespace

string

"<database>.<collection>"形式でシャーディングするコレクションの名前空間

key

ドキュメント

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

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

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

シャードキーはインデックスでサポートされている必要があります。コレクションが空でない限り、shardCollection コマンドの前にインデックスが存在している必要があります。コレクションが空の場合、シャードキーをサポートできるインデックスがまだ存在しない場合には、MongoDB はコレクションをシャーディングする前にインデックスを作成します。

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

unique

ブール値

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

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

レガシーmongo shellの場合、options ドキュメントを指定する場合は、unique の 値を明示的に指定する必要があります。 mongoshでは、 optionsドキュメントを指定する場合、 uniqueは必要ありません。

options

ドキュメント

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

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

Parameter
タイプ
説明

numInitialChunks

integer

任意。空のコレクションをハッシュされたシャードキーでシャーディングするときに最初に作成するチャンクの最小数を指定します。次に、MongoDB はクラスター全体でチャンクを作成し、バランスをとります。numInitialChunks パラメーターは、シャードあたり 8192 チャンク未満である必要があります。デフォルトはシャードあたり 2 チャンク。

コレクションが空でない場合、またはシャードキーにハッシュされたフィールドが含まれていない場合、操作はエラーを返します。

  • presplitHashedZones: true でシャーディングする場合、 MongoDBは指定された数のチャンクをクラスター内のゾーン全体に均等に分散しようとします。

  • presplitHashedZones: false または省略でシャーディングし、空のコレクションにゾーンとゾーン範囲が定義されていない場合、 MongoDBは指定された数のチャンクをクラスター内のシャード全体に均等に分散しようとします。

  • presplitHashedZones: false または省略でシャーディングし、空のコレクションに対してゾーンとゾーン範囲が定義されている場合、numInitialChunks は効果がありません。

collation

ドキュメント

任意。shardCollection に指定されたコレクションにデフォルトの照合がある場合は、``{ locale : "simple" }`` を使用して照合ドキュメントを含める必要があります。そうしないと、shardCollection コマンドは失敗します。フィールドがシャードキー パターンをサポートするインデックスの少なくとも 1 つには、単純照合が必要です。

ブール値

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

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

ドキュメント

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

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

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

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

バージョン 5.1 で追加

シャーディングされた新しい時系列コレクションを作成するには、timeseries オプションをsh.shardCollection()に指定します。

timeseries オプションには次のフィールドが含まれます。

フィールド
タイプ
説明

timeField

string

必須。各時系列ドキュメントの日付を含むフィールドの名前。 時系列コレクション内のドキュメントには、 timeFieldの値として有効な BSON 日付が必要です。

metaField

string

任意。各時系列ドキュメントのメタデータを含むフィールドの名前。指定されたフィールドのメタデータは、一意の時系列ドキュメントにラベルを付けるために使用されるデータでなければなりません。メタデータを変更する必要はめったにありません。指定されたフィールドの名前を _id または timeseries.timeField と同じ名前にはできません。フィールドは任意のデータ型に指定できます。

metaFieldフィールドは任意ですが、メタデータを使用するとクエリの最適化が向上します。 たとえば、MongoDB metaFieldtimeFieldは新しいコレクションの フィールドと フィールドに 複合インデックス を自動的に作成します 。このフィールドに値を指定しない場合、データは時間のみに基づいてバケット化されます。

granularity

string

任意。可能な値は次のとおりです。

  • "seconds"

  • "minutes"

  • "hours"

デフォルトでは、MongoDB は高頻度の取り込みの場合、 granularity"seconds"に設定します。

時系列コレクション内のデータが内部的に保存される方法を最適化してパフォーマンスを向上させるには、 granularityパラメーターを手動で設定します。 granularityの値を選択するには、連続する受信測定値間の時間範囲に最も近い一致を選択します。

timeseries.metaFieldを指定する場合は、 metaFieldフィールドに同じ一意の値を持つ連続した受信測定値間の時間範囲を考慮してください。 測定値は、同じソースから取得された場合、多くの場合、 metaFieldフィールドの一意の値と同じ値になります。

timeseries.metaFieldを指定しない場合は、コレクションに挿入されるすべての測定値間の時間範囲を考慮してください。

granularityパラメーターを設定した場合、bucketMaxSpanSeconds パラメーターとbucketRoundingSeconds パラメーターは設定できません。

このメソッドは、次の環境でホストされている配置で使用できます。

  • MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです

重要

このコマンドは、M 0 、M 2 、M 5クラスターではサポートされていません。 詳細については、「サポートされていないコマンド 」を参照してください。

  • MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン

  • MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン

シャードキーは後でも変更できますが、スケーラビリティやパフォーマンスの問題を回避するために、シャードキーの選択を慎重にすることが重要になります。

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

  • この metaField

  • サブフィールド metaField

  • この timeField

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

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

Tip

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

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

Tip

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

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

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

注意

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

Tip

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

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

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

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

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

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

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

Tip

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

unique: trueを指定する場合

シャードキーがプレフィックスであるユニーク複合インデックスを持つことは可能ですが、unique パラメーターを使用する場合、コレクションにはシャードキー上のユニークインデックスが必要です。

シャーディングされたコレクションと一意のインデックス」も参照してください

コレクションにデフォルトの照合がある場合、sh.shardCollection() コマンドには { locale: "simple" } の値を持つ collation パラメーターが含まれている必要があります。デフォルトの照合を使用する空でないコレクションの場合、フィールドがシャードキー パターンをサポートする単純照合のインデックスが少なくとも 1 つ必要です。

照合のないコレクションにはcollationオプションを指定する必要はありません。 照合のないコレクションに対して 照合オプションを指定しても、効果はありません。

mongos は、shardCollection コマンドの書込み保証 (write concern)、そのヘルパー sh.shardCollection()、および sh.shardAndDistributeCollection() メソッドに対して、"majority" を使用します。

records という名前のデータベースに people という名前のコレクションがある場合、次のコマンドは zipcode フィールドでコレクションをシャーディングします。

sh.shardCollection("records.people", { zipcode: 1 } )

phonebookデータベースには、デフォルトの照合順序のないコレクションcontactsがあります。次の例では、sh.shardCollection()を使用してphonebook.contactsを次のものとシャードします。

sh.shardCollection(
"phonebook.contacts",
{ last_name: "hashed" },
false,
{
numInitialChunks: 5,
collation: { locale: "simple" }
}
)

戻る

sh.shardAndDistributeCollection