MongoDB はコレクションに関連付けられた シャードキーを使用して、データを特定のシャードが所有するチャンクに分割します。チャンクは、シャーディングされたデータの範囲で構成されます。各チャンクにはシャードキーに基づく包括的下限と排他的上限があります。
チャンクが表現できるデータの最小単位は、ユニークなシャードキー値 1 件です。
最初のチャンク
入力済みのコレクション
シャーディング操作では、すべてのシャードキー値をカバーする大きな初期チャンクが 1 件作成されます。
初期チャンクの作成後、データのバランシングが必要になった時に、バランサーによって最初のチャンクから一定の範囲が分割されます。
空のコレクション
空、または存在しないコレクションに対してゾーンとゾーン範囲が定義されている場合。
シャーディング操作では、定義されたゾーン範囲の空のチャンクと、シャードキー値の全範囲をカバーする追加のチャンクが作成され、ゾーン範囲に基づいて初期チャンク分散が実行されます。このように初期チャンクを作成して分散することで、 ゾーンシャーディングの設定を迅速に行うことができます。
初期分散後、バランサーは今後のチャンク分散を管理します。
空、または存在しないコレクションにゾーンとゾーン範囲が定義されていない場合。
ハッシュされたシャーディングの場合:
シャーディング操作では、シャードキー値の全範囲をカバーする空のチャンクが作成され、初期チャンクの分散が実行されます。デフォルトでは、この操作はシャードごとに 2 つのチャンクを作成し、クラスター全体に移行します。
numInitialChunksオプションを使用すると、異なる初期チャンク数を指定できます。このように初期チャンクを作成して分散することで、シャーディングの設定を迅速に行うことができます。初期分散後、バランサーは今後のチャンク分散を管理します。
範囲シャーディングの場合:
シャーディング操作では、シャードキー値の全範囲をカバーする空のチャンクが 1 つ作成されます。
最初のチャンク作成後、必要に応じて、バランサー最初のチャンクがシ複数のシャードに移行され、将来のチャンク分散がバランサーで管理されます。
範囲サイズ
MongoDB のデフォルトの範囲サイズは 128 メガバイトです。チャンクのサイズは増減させることができます。デフォルトのチャンク サイズを変更した場合の影響を検討します。
範囲サイズが小さいと、移行の頻度が増える代わりに、データがより均等に分散されるため、クエリルーティング(
mongos)レイヤーのオーバーヘッドが増加します。範囲サイズが大きければ、移行の頻度は減り、 クエリルーティングレイヤーのネットワークと内部のオーバーヘッドは減りますが、データの分散が不均等になる可能性があります。
範囲サイズは、移行する範囲ごとの最大ドキュメント数に影響します。
ほとんどの配置では、頻繁に移行を行うより、データ分散がわずかに不均等になる方が適しています。
範囲の移行
MongoDB では、シャーディングされたクラスター内のデータ範囲が移行され、シャーディングされたコレクションのデータをシャード間で均等に分散します。 移行は次のいずれかの手段で行います。
手動一括挿入の間ににデータを分散する場合など、限られた場合にのみ手動移行を使用します。詳細についてはチャンクの手動移行を参照してください。
シャーディングされたクラスターのバランサーの詳細については、 シャーディングされたクラスターのバランサーを参照してください。
バランシング
バランサーは、データの移行を管理するバックグラウンドプロセスです。最大シャードと最小シャードのデータの差が移行しきい値を超えると、バランサーにより複数のクラスターにわたるデータの移行が開始されます。
バランサーの一部の要素を管理することができます。また、バランサーは、シャーディングされたクラスターの構成ゾーンの一部として作成されたどのゾーンも尊重します。
バランサーの詳細についてはシャーディングされたクラスターのバランサーを参照してください。
不可分 / ジャンボチャンク
指定のチャンク サイズを超えて大きくなるが分裂できないチャンクは、ジャンボチャンクと呼ばれます。最も一般的な原因は、チャンクが単一のシャードキー値を表す場合です。シャードキー値の発生する 頻度 が高い場合、 ジャンボ チャンクはパフォーマンスのボトルネックになる可能性があります。
MongoDB 5.0 以降では、ドキュメントのシャードキーを変更することでコレクションの再シャーディングが可能です。
refineCollectionShardKey コマンドは、よりきめの細かいデータ分散を可能にし、シャードキーの濃度が不十分なために発生する ジャンボ チャンクを解決できます。
コレクションを再シャーディングすべきか、シャードキーを改善すべきかについては、シャードキーの変更を参照してください。
詳細については、以下を参照してください。