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