MongoDBでは、シャーディングされたシステムにアクセスしてもバランスが取れていない場合、いくつかの原因の1つである可能性があります。
-
バランシングをトリガーするのに十分なデータがない可能性があります。それは間違いなくあなたの状況ではありませんでしたが、64MBのデフォルトのチャンクサイズでは、データの一部を他のチャンクに分割してバランスをとるのに十分になるまでにデータの挿入に時間がかかる場合があることに気付かない人もいるかもしれません。
-
バランサーが実行されていない可能性があります。他のコレクションのバランスが取れていたため、何らかの理由でバランサーが停止した後、このコレクションが最後にシャーディングされない限り、このコレクションはほとんどありませんでした。
-
コレクション内のチャンクは移動できません。これは、シャードキーがデータを十分に小さいチャンクに分割するのに十分な粒度ではない場合に発生する可能性があります。シャードキーがこの大規模なコレクションに対して十分に細かくないことが判明したため、これが当てはまることがわかりました。105個のチャンク(おそらく一意のjob_id値の数に対応)と30GBを超えるデータがあります。チャンクが大きすぎてバランサーが移動できない場合は、「ジャンボ」としてタグ付けされます(したがって、チャンクを移動しようとしてホイールが回転しません)。
シャードキーの不適切な選択から回復するにはどうすればよいですか?通常、シャードキーを変更するのは非常に面倒です。シャードキーは不変であるため、別のシャードキーを使用してコレクションに取り込むには、完全なデータ移行と同等の処理を行う必要があります。ただし、あなたの場合、コレクションはすべて1つのシャード上にあるため、コレクションを「アンシャーディング」して、新しいシャードキーで再シャーディングするのは比較的簡単です。 job_idの数は比較的少ないので、通常のインデックスを使用してjob_id、customer_codeをシャーディングすることをお勧めします。これは、おそらくクエリを実行し、ドキュメントの作成時に常に設定されると思います。