MongoDB シャーディング: 例を含むステップバイステップのチュートリアル
⚡ スマートサマリー
MongoDB シャーディングは、大きなデータセットを複数のサーバーに分散された小さなサブセットに分割します。 MongoDB インスタンスを複数使用することで、単一サーバーのCPU負荷を軽減します。シャーディングされたクラスタは、シャード、構成サーバー、ルーターを組み合わせて、ストレージとクエリのスループットを水平方向に拡張します。
シャーディングとは何ですか MongoDB?
シャーディングは次の概念です。 MongoDB、大きなデータ セットを複数の小さなデータ セットに分割します。 MongoDB インスタンス。
場合によっては、その中のデータ MongoDB データ量が非常に大きいため、このような大規模なデータセットに対するクエリは、サーバーのCPU使用率を大幅に増加させる可能性があります。この状況に対処するため、 MongoDB シャーディングの概念があり、基本的にデータセットを複数に分割することです。 MongoDB インスタンス。
膨大な量になる可能性のあるこのコレクションは、実際には複数のコレクション(シャードと呼ばれる)に分割されています。論理的には、すべてのシャードは1つのコレクションとして機能します。
シャーディングの利点 MongoDB
シャーディングされたクラスターを実装する前に、チームがシャーディングを採用する理由を理解しておくと役立ちます。主な利点は次のとおりです。
- 水平スケーラビリティ: データは、単一のマシンを際限なく大型化させるのではなく、多数の汎用サーバーに分散される。
- より高いスループット: 読み取りおよび書き込み操作はシャード間で並列実行されるため、クラスターは1秒あたりにより多くのリクエストを処理できます。
- より大きなストレージ容量: すべてのシャードを統合したディスクには、1台のサーバーが保存できるデータよりもはるかに大きなデータセットを保存できます。
- 高可用性: 各シャードがレプリカセットとしてデプロイされている場合、単一ノードの障害によってクラスタが停止することはありません。
- バランスの取れた負荷: その MongoDB バランサーは、特定のシャードがホットスポットになるのを防ぐために、データチャンクを自動的に再分配します。
これらの利点を総合すると、シャーディングはスケーリングの標準的なアプローチとなる。 MongoDB 単一サーバーの限界を超える。
シャーディングの実装方法
シャードはクラスターを使用して実装されます。クラスターとは、 MongoDB インスタンス。
シャードの構成要素は以下のとおりです。
- 破片 – これは基本的なことであり、これは単なるものではありません MongoDB データのサブセットを保持するインスタンス。運用環境では、すべてのシャードがレプリカ セットの一部である必要があります。
- 構成サーバー - これは MongoDB クラスターに関するメタデータ、つまりさまざまな情報を保持するインスタンス MongoDB シャードデータを保持するインスタンス。
- ルーター - これは MongoDB これは基本的に、クライアントから送信されたコマンドを適切なサーバーにリダイレクトする役割を担うインスタンスです。
ステップバイステップのシャーディング Cluster 例:
ステップ1) 構成サーバー用に別のデータベースを作成します。
mkdir /data/configdb
ステップ2) 始める MongoDB インスタンスを構成モードにします。たとえば、構成サーバーとなるサーバー D という名前のサーバーがあるとします。サーバーを構成サーバーとして構成するには、以下のコマンドを実行する必要があります。
mongod --configdb ServerD:27019
ステップ3) 設定サーバーを指定してmongosインスタンスを起動します。
mongos --configdb ServerD:27019
ステップ4) mongoシェルからmongosインスタンスに接続します。
mongo --host ServerD --port 27017
ステップ5) クラスターに追加する必要のあるサーバーAとサーバーBがある場合は、以下のコマンドを実行してください。
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
ステップ6) データベースのシャーディングを有効にします。Employeedbデータベースをシャーディングする必要がある場合は、以下のコマンドを実行してください。
sh.enableSharding("Employeedb")
ステップ7) コレクションのシャーディングを有効にします。例えば、Employee コレクションをシャーディングする必要がある場合は、以下のコマンドを実行します。
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
シャードキーの選択方法 MongoDB
シャードキーは、インデックス付きフィールド、またはフィールドのセットであり、 MongoDB どのシャードに各ドキュメントを保存するかを決定するために使用されます。キーはデータ分散を左右するため、シャーディング環境において、適切なキーを選択することが最も重要な決定事項となります。不適切なキーを使用すると、データとトラフィックが1つのシャードに集中し、シャーディングのメリットが損なわれてしまいます。
強力なシャードキーは一般的に以下の特徴を備えています。
- 高いカーディナリティ: そのフィールドには多くの可能な値があり、それによってデータを多くの細かい粒度の塊に分割できる。
- 低頻度: 単一の値が支配的であってはならない。そうでない場合、その値を共有するドキュメントが1つのシャードに集中してしまう。
- 非単調変化: タイムスタンプのように常に増加するキーは、新しい書き込みのたびに同じシャードに送信するため、ホットスポットが発生します。
MongoDB キーに基づいて、2つのシャーディング戦略をサポートしています。範囲シャーディングはデータを連続した範囲に分割し、範囲クエリに適しています。一方、ハッシュシャーディングはハッシュ関数を適用して、書き込みをシャード全体に均等に分散します。書き込みが多い場合はハッシュシャーディングから始め、範囲ベースの読み取りが主流になった場合は範囲シャーディングに切り替えるのが一般的です。どちらの戦略を選択する場合でも、シャードキーは一度データがロードされると簡単に変更できないため、コミットする前に、実際のクエリパターンに対してキーをテストしてください。
シャーディングとレプリケーションの比較 MongoDB
シャーディングとレプリケーションは相互補完的な機能ですが、それぞれ異なる機能です。以下の表は両者の違いを明確に示しており、それぞれを正しく適用するのに役立ちます。実際の運用環境では、両方の機能が併用されるのが一般的です。
| 側面 | シャーディング | Replication |
|---|---|---|
| 目的 | データを分割して水平方向に拡大縮小する | データを保護し、いつでも利用できるようにしておく |
| 各ノードのデータ | データのサブセット(1つのシャード) | データの完全なコピー |
| 主な利点 | ストレージ容量とスループットの向上 | 耐障害性と読み取りスケーリング |
| 主要監視コンポーネント | シャード、設定サーバー、mongosルーター | 主要メンバーおよび二次メンバー |
つまり、シャーディングはスケーラビリティのニーズに応え、レプリケーションは可用性のニーズに応え、堅牢なデプロイメントはその両方を組み合わせたものとなる。

