複製は、シャーディングが実際に達成しようとしていることの利点を見逃していない限り、シャーディングよりもはるかに単純に思えます。どちらも水平方向のスケーリングを提供していませんか?
8 に答える
MongoDB のスケーリングのコンテキストでは:
レプリケーションにより、データの追加コピーが作成され、別のノードへの自動フェイルオーバーが可能になります。最新ではない可能性のあるデータを読み取ってもよい場合、レプリケーションは読み取りの水平方向のスケーリングに役立つ場合があります。
シャーディングは、シャード キーを使用して複数のサーバー間でデータを分割することにより、データ書き込みの水平方向のスケーリングを可能にし。適切なシャード キーを選択することが重要です。たとえば、シャード キーの選択を誤ると、単一のシャードにのみ書き込まれるデータの "ホット スポット" が発生する可能性があります。
MongoDB はシャード間のデータとリクエストの分散を管理する必要があるため、シャード環境では複雑さが増します。これらの側面を管理するために、追加の構成プロセスとルーティング プロセスが追加されます。
通常、レプリケーションとシャーディングを組み合わせて、各シャードがレプリカ セットによってサポートされるシャードクラスターを作成します。
クライアント アプリケーションの観点からは、レプリケーション/シャーディングの相互作用に関してもある程度制御できます。特に:
レプリケーションは、ほとんどが従来のマスター/スレーブ設定であり、データはバックアップ メンバーに同期され、プライマリに障害が発生した場合、そのうちの 1 つが代わりになります。これはかなり単純なツールです。これは主に冗長性を目的としていますが、レプリカ セット メンバーを追加することで読み取りをスケーリングできます。これは少し複雑ですが、一部のアプリではうまく機能します。
通常、シャーディングはレプリケーションの上にあります。MongoDB の「シャード」は、その前に「ルーター」と呼ばれるものがある単なるレプリカ セットです。アプリケーションはルーターに接続し、クエリを発行し、どのレプリカ セット (シャード) に転送するかを決定します。対処するルーターと構成サーバーがあるため、単一のレプリカセットよりもはるかに複雑です (これらは、どのデータがどこに保存されているかを追跡します)。
Mongo を水平方向にスケーリングする場合は、シャードします。10gen は、ルーター/構成サーバーのセットアップを自動シャーディングと呼びます。アプリにどのDBに書き込むかを決定させる、よりゲットーな形式のシャーディングを行うことも可能です。
シャーディング
シャーディングは、複数のサーバー間で大きなコレクションを分割する手法です。シャードするときは、複数のmongod
サーバーをデプロイします。そして前面mongos
はルーターです。アプリケーションはこのルーターと通信します。次に、このルーターは、さまざまなサーバーである と通信しますmongod
。通常、アプリケーションとmongos
は同じサーバーに配置されます。mongos
同じマシンで複数のサービスを実行できます。また、サーバーごとに 1 つではなく、複数mongod
の のセット (まとめてレプリカ セットと呼ばれます)を保持することもお勧めしmongod
ます。レプリカ セットは、複数の異なるインスタンス間でデータの同期を維持するため、インスタンスの 1 つがダウンしてもデータが失われることはありません。論理的には、各レプリカ セットはシャードと見なすことができます. アプリケーションに対して透過的です。シャードMongoDB
を選択する方法は、シャード キーを選択することです。
student
コレクションのためstdt_id
に、シャードキーとして持っているか、複合キーである可能性があると仮定します。そしてmongos
サーバーは、範囲ベースのシステムです。したがって、シャード キーとして送信した に基づいて、リクエストが適切なインスタンスstdt_id
に送信されます。mongod
では、開発者として本当に知っておくべきことは何でしょうか?
insert
シャード キーを含める必要があるため、マルチパート シャード キーの場合は、シャード キー全体を含める必要があります。- コレクション自体のシャードキーが何であるかを理解する必要があります
- 、
update
、- にシャード キーが指定されていない場合remove
-コレクションをカバーするすべての異なるシャードにリクエストをブロードキャストする必要があります。find
mongos
- - シャード キー全体を指定しない場合は、
update
それをブロードキャストする必要があることを認識できるように、マルチ アップデートにする必要があります。
シャーディングやレプリケーションについて考えるときはいつでも、書き込み/更新操作のコンテキストで考える必要があります。書き込みをスケーリングする必要がない場合は、かなり単純なレプリケーションが適しています。
一方、主に更新/書き込みのワークロードを処理すると、ある時点で書き込みのボトルネックにぶつかります。書き込みリクエストが来ると、Mongo は他の書き込みリクエストをブロックします。これらの書き込み要求は、最初の要求が実行されるまでブロックされます。この書き込みをスケーリングして並列化したい場合は、シャーディングを実装する必要があります。
MongoDB Atlas は、could のサービスとしてのデータベースです。Azure、AWS、GCP などの 3 つの主要なクラウド プロバイダーをサポートしています。クラウド環境では、通常、高可用性とスケーラビリティについて話します。Atlas の「クラスター」では、レプリカ セットまたはシャード クラスターのいずれかになります。これら 2 つは、クラウド環境の高可用性とスケーラビリティ機能に対応しています。
一般に、クラスターは特定のタスクを達成するために使用されるサーバーのグループです。そのため、分割されたクラスターを使用して複数のマシンにデータを保存し、データの増加の需要に対応しています。データのサイズが大きくなると、1 台のマシンではデータを格納したり、許容できる読み取りおよび書き込みスループットを提供したりするには不十分な場合があります。シャード クラスターは、基盤となるクラウド環境の水平方向のスケーラビリティをサポートします。
MongoDB のレプリカ セットは、同じデータ セットを維持する mongod プロセスのグループです。レプリカ セットは、冗長性と高可用性を提供し、すべての運用展開の基礎となります。レプリカでは、1 つのノードがすべての書き込み操作を受け取るプライマリ ノードです。セカンダリなどの他のすべてのインスタンスは、プライマリからの操作を適用して、同じデータ セットを持つようにします。レプリカ セットは、主にデータの可用性に重点を置いています。
ドキュメントを確認してください
ありがとうございました。