MongoDB の チャンク について

0 件のコメント

今回は「MongoDB の チャンク」についてまとめます。

概要

MongoDB はシャードキーを利用してコレクションを「チャンク」と呼ばれるデータの塊に分割します。 ここでは「チャンク」について「サイズ」「分割」「平準化」をまとめました。

チャンクサイズ

MongoDB のデフォルトチャンクサイズは 64MB です。 後から変更できますが、以下のようなことを考える必要があります。

  • チャンクサイズを減らす場合、シャードサーバー間の平準化はしやすいが、ルーターサーバーの負荷が上がります。
  • チャンクサイズを増やす場合、平準化操作が減るのでネットワーク負荷とルーターサーバー負荷が減ります。 ただし、データはシャードサーバー間で不均一になる可能性があります。
  • チャンクに保存できるドキュメント数。
  • シャードサーバーに保存できるチャンク数。

チャンクサイズは以下の範囲で指定可能です。

  • 1MB ~ 1024MB

チャンクサイズ変更時には以下の制約があります。

  • チャンクサイズを小さくしたとき行われる自動分割は INSERT か UPDATE の操作時に実行されます。 そのため、完全に平準化されるまで時間がかかります。
  • チャンクサイズを大きくした場合、

チャンクサイズの変更方法については以下の記事へまとめていますのであわせてご参照ください。

チャンク分割

チャンクに含まれるドキュメント(容量または数)が増えすぎるとチャンク分割が自動で行われます。

チャンクに含まれるドキュメントに対して INSERT または UPDATE が行われた際、 以下のいずれかの条件を満たすとチャンクが分割されます。

  • チャンクに含まれるドキュメント総容量
    • ドキュメント総容量がチャンクサイズ上限を超えた場合
  • チャンクに含まれるドキュメント総数
    • ドキュメント総数が 250,000個 以上の場合
    • ドキュメント総数が チャンクサイズ / 平均ドキュメントサイズ * 1.3 個 以上の場合

(参考) GitHub mongodb/mongo : /src/mongo/db/s/migration_chunk_cloner_source_legacy.cpp (L.640-651)

チャンク平準化

チャンク分割されるとシャード間でチャンク数にばらつきが出てしまいます。 「バランサー」と呼ばれるモジュールがシャード間のチャンク数のばらつきを自動的に平準化します。

「最も多くチャンクを保持しているシャードのチャンク数」と「チャンクを保持しいている数が最も少ないシャードのチャンク数」の差(閾値)が以下の条件を満たすと、シャード間のチャンク数のばらつきが平準化されます。

チャンク数 閾値
20未満 2
20~79 4
80以上 8

今回は「MongoDB の チャンク」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!