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