【noSQL】MongoDBシャーディングとは複数のノードに渡るデータの分散配置の仕組みMongoDBにおけるデータを分割して各サーバに格納していくオートシャーディングの仕組みシャーディングとはシャーディングとは、複数のノードに渡るデータのディストリビューションを指します。複数のノードに渡って異なるデータを保存することで、読み取りや書き込みのパフォーマンスのための水平方向のスケーラビリティが実現します。パフォーマンスによってボトルネックが発生することがあります。シャーディングは、シャードノードが処理するオペレーションの数を減らし、クラスター全体のパフォーマンスを向上させることで、このボトルネックを解決します。シャーディングは水平スケーリングさせることを可能にし、下記のメリットをもたらします。負荷分散により性能の向上:データを複数のサーバに分散させることにより,CPUやI/O負荷を分散させることが可能です。リソース分散によるコストパフォーマンスの向上:メモリやディスクは、サイズの大きなモジュールほど単価が価格が高くなります。複数のサーバにデータを分散させて、それぞれのサーバにのせるメモリやディスクの容量を小さくすることが,コストパフォーマンスの向上につながります。WatanabeMongoDBにおけるオートシャーディングの仕組みMongoDBのシャーディングはレンジパーティション方式を採用しています。シャードキーを指定することで,各サーバに格納されるデータの範囲が決定されます。サーバ間で重複データは持たず,1つのデータが格納されるサーバはシャードキーの範囲によって1つに決定されます。分散するデータの単位は、「チャンク」とよばれ、あるコレクションの連続した範囲のデータで、複数のドキュメントとなります。チャンクは設定された最大サイズに達すると分割され、シャードが持っているチャンク数に応じて必要であれば他のシャードに自動的に移動されます。チャンクの分割と移動はパフォーマンスに与えるインパクトは大きく、チャンクの移動や分割中には一部リクエストは正しい情報を返せないので、できるだけチャンクの移動や分割が少なくなるような適切なシャードキーの選択が肝となります。Ogasawaraチャンクを自動的に分割していくリバランシングの仕組みMongoDBのオートバランシングでは、各シャードにおいて、最大のチャンク数を持つシャードと最小のチャンク数を持つシャードの差が規定値を超えると、均等化の処理としてチャンクの移動が行われます。(新規にシャードを追加した場合も同様にリバランシング処理が行われる)たとえば、Shard1にチャンクAのみがある状態から、Shard1にチャンクBも追加されてさらにShard1にチャンクCも追加されたとします。規定値が2であると、規定値を超えていますのでチャンクCがShard2に自動的に移動されます(下図参照ください)。Ogasawaraシャーディングを活用したMongoDBのアーキテクチャ上述のシャーディング機能を活用した、可用性と水平スケールを実現するMongoDBのアーキテクチャ構成例につきましては、下記ページなどご覧ください。MongoDBのアーキテクチャ本サイト上に掲載されているまとめ記事が、毎週ステップメールで受け取ることもできます。