レプリカ・セットあなたは、それぞれがお互いの全てのデータをミラーリングするMongoDBの複数のインスタンスを有することを意味します。レプリカセットは、1つのマスター(「プライマリ」とも呼ばれます)と1つ以上のスレーブ(別名セカンダリ)で構成されます。読み取り操作はどのスレーブでも処理できるため、レプリカセットにスレーブを追加することで読み取りパフォーマンスを向上させることができます(クライアントアプリケーションが実際に異なるセットメンバーを使用できる場合)。ただし、書き込み操作は常にレプリカセットのマスターで行われ、その後スレーブに伝達されるため、スレーブを追加しても書き込みは速くなりません。
レプリカセットはフォールトトレランスも提供します。レプリカセットのメンバーの1つがダウンすると、他のメンバーが引き継ぎます。マスターがダウンすると、スレーブは新しいマスターを選出します。そのため、生産的な展開では、常に少なくとも3台のサーバーのレプリカセットとしてMongoDBを使用することをお勧めします。2台はデータを保持します(3台目は、データなしの「アービター」で、スレーブの1つがダウンします)。
かけら、クラスタは、(また、レプリカセットであることができる)、クラスタの各シャードは、データの一部の世話をすることを意味します。読み取りと書き込みの両方の各要求は、データが存在するクラスターによって処理されます。つまり、クラスターにシャードを追加することで、読み取りと書き込みの両方のパフォーマンスを向上させることができます。どのドキュメントがどのシャードに存在するかは、各コレクションのシャードキーによって決まります。データが均等にすべてのクラスタ上で配布することができるように選択されなければならないので、それがシャードキーが存在(例えば、最も一般的なクエリのための明確であること:あなたが頻繁による照会するとuser_name
、あなたのシャード・キーが含まれている必要がありフィールドをuser_name
使用して、各クエリをそのドキュメントを持つ1つのシャードのみに委任できます)。
欠点は、フォールトトレランスが低下することです。クラスターの1つの断片がダウンすると、その上のデータにアクセスできなくなります。そのため、クラスターの各メンバーもレプリカセットにする必要があります。これは必須ではありません。高可用性を気にしない場合、シャードは複製のない単一のmongodインスタンスにすることもできます。しかし、本番用には常にレプリケーションを使用する必要があります。
それで、あなたの例にとってそれはどういう意味ですか?
Sharded Cluster
/ | \
Shard A Shard B Shard C
/ \ / \ / \
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
|Primary| |Secondary| |Primary| |Secondary| |Primary| |Secondary|
| 25GB |=| 25GB | | 25 GB |=| 25 GB | | 25GB |=| 25GB |
+-------+ +---------+ +-------+ +---------+ +-------+ +---------+
75GBのデータをそれぞれ25GBの3つのシャードに分割する場合、3つのレプリカセットで編成された少なくとも6つのデータベースサーバーが必要です。各レプリカセットは、同じ25 GBのデータを持つ2つのサーバーで構成されます。
また、3つのレプリカセットのアービター用のサーバー、およびクラスターのmongosルーターと構成サーバーも必要です。アービターは非常に軽量で、レプリカセットメンバーがダウンした場合にのみ必要なので、通常は同じハードウェアを他のハードウェアと共有できます。ただし、Mongosルーターとconfig-serverは冗長で、独自のサーバー上にある必要があります。