シャーディングが実際に達成しようとしているメリットが欠けていない限り、レプリケーションはシャーディングよりずっと簡単です。彼らはどちらも水平スケーリングを提供していませんか?Mongoでは、シャーディングとレプリケーションの違いは何ですか?
答えて
:
replicationは、データの追加コピーを作成し、別のノードへの自動フェイルオーバーを可能にします。潜在的に最新のものではないデータを読み取ることができれば、複製は水平方向のスケーリングに役立ちます。
shardingはキーシャードを使用して複数のサーバー間でデータを分割することにより、書き込みデータの水平スケーリングが可能になります。 choose a good shard keyにとって重要です。例えば、シャードキーの選択肢が乏しいと、単一のシャード上にのみ書き込まれるデータの「ホットスポット」につながる可能性があります。 MongoDBのが今の破片の間でデータや要求を分散管理する必要があるため
シャード環境がmore complexityを追加し - 追加設定し、ルーティングプロセスは、これらの側面を管理するために追加されます。
レプリケーションとシャーディングは、通常、それぞれのシャードがレプリカセットでサポートされているsharded clusterを作成するために組み合わされます。
ビューのクライアントアプリケーションの観点から、あなたはまた、特に、複製/シャーディング相互作用に関連して、いくつかのコントロールを持っている:
レプリケーションは主に従来のマスター/スレーブ設定であり、データはバックアップメンバーに同期され、プライマリが失敗した場合はそのうちの1つが代わりに使用されます。それは合理的に簡単なツールです。これは主に冗長性を目的としていますが、レプリカセットメンバーを追加して読み取りを拡張できます。これは少し複雑ですが、一部のアプリではうまく機能します。
シャーディングは、通常、複製の上に座っています。 MongoDBの "Shards"はレプリカセットであり、その前に "ルータ"と呼ばれるものがあります。あなたのアプリケーションはルータに接続し、クエリを発行し、どのレプリカセット(シャード)に物事を転送するかを決定します。これは対処すべきルータと設定サーバを持っているので(これは、どのデータがどこに格納されているかを追跡するため)、単一の複製セットよりもはるかに複雑です。
モンゴを水平方向に拡大したい場合は、シャードします。 10genは、ルータ/設定サーバーの設定自動シャーディングを呼び出すのが好きです。あなたがアプリケーションにどのDBに書き込むかを決定させるシャトーのもっとゲットーな形をすることも可能です。 MongoDBのスケーリングの文脈において
は「より多くのゲットーフォーム」というフレーズを愛し、それを放送する必要があることを知っているように、それはマルチアップデート確認する必要があります – scarpacci
をあなたが考えているときはいつでもシャーディングやレプリケーションについては、ライター/更新操作のコンテキストで考える必要があります。書き込みをスケールする必要がない場合、レプリケーションはかなり簡単ですが、あなたにとっては良い選択です。
一方、ほとんどの場合更新/書き込みを実行すると、ある時点でライトボトルネックが発生します。書き込み要求が来たら、Mongoは他の書き込み要求をブロックする。これらの書き込み要求ブロックは、最初の要求が行われるまで実行されます。この書き込みを拡大して並列化したい場合は、シャーディングを実装する必要があります。
シャーディング
シャーディングは、複数のサーバ間で大規模なコレクションを分割する技術です。私たちは、シャードすると、複数のサーバーを展開します(mongod
)。そして、正面にはルータであるmongos
があります。アプリケーションはこのルータと通信します。次に、このルータはさまざまなサーバ(mongod
)と通信します。アプリケーションとmongos
は通常、同じサーバー上に同じ場所に配置されます。同じマシン上で複数のmongos
サービスを実行させることができます。また、各サーバー上に複数のmongod
(レプリカセットと呼ばれる)のセットを1つずつmongod
の代わりに保持することをお勧めします。レプリカセットは、いくつかの異なるインスタンス間でデータを同期させておくため、一方がダウンするとデータが失われないようにします。論理的には、各レプリカセットはシャードと見なすことができます。アプリケーションに透過的です。MongoDB
がシャードに選択する方法は、シャードキーを選択しています。
はstudent
収集のために、我々はシャードキーとしてstdt_id
を持っているか、それが複合キー可能性があり、想定します。サーバはmongos
で、これは範囲ベースのシステムです。したがって、私たちがシャードキーとして送信するstdt_id
に基づいて、それは右のmongod
インスタンスにリクエストを送信します。
開発者として本当に知っておく必要はありますか?
insert
それはマルチpartedのシャードキーだ場合、我々はシャードキーはコレクション自体- であるかを理解するためにきた
- キー全体シャードを含まなければならないので、シャードキーを含める必要があります
update
、remove
、find
の場合 -mongos
にシャードキーが指定されていない場合 - コレクションをカバーするすべての異なるシャードにリクエストをブロードキャストする必要があります。update
ため - - 私たちは全体のシャードキーを指定しない場合、我々はそれが
- 1. カサンドラのシャーディングとレプリケーション
- 2. mongo DBのupdateManyメソッドとの違いは何ですか?
- 3. Mongo Scala DriverとReactive-Mongo Driverのプレイフレームワークの違いは何ですか?
- 4. シャーディングとは何ですか、なぜ重要なのですか?
- 5. Mongoレプリケーション
- 6. 従来のMongoインデックスメソッドと新しいテキストインデックスとの違いは何ですか?
- 7. 流星mongo fetch()とは何ですか?
- 8. mongodbフルスキャンクエリのパフォーマンスを向上させる:レプリケーションまたはシャーディング?
- 9. $と$$の違いは何ですか?
- 10. `##`と `hashCode`の違いは何ですか?
- 11. typedefとの違いは何ですか?
- 12. NodeJS:「./ ..」と「..」の違いは何ですか?
- 13. {}())と{})の違いは何ですか?
- 14. `&`と `ref`の違いは何ですか?
- 15. `==`と `is`の違いは何ですか?
- 16. difftimeと ' - 'の違いは何ですか?
- 17. #{} $ {}と%{}の違いは何ですか?
- 18. ⊕と+の違いは何ですか?
- 19. アペンダーと〜の違いは何ですか?
- 20. "./"と "../"の違いは何ですか?
- 21. "$^N"と "$ +"の違いは何ですか?
- 22. %Qと%{}の違いは何ですか?
- 23. バックスティックと$()の違いは何ですか?
- 24. A`と ``の違いは何ですか[:] `
- 25. XPathの//と?/の違いは何ですか?の使用は何
- 26. METADATAとMETADATA.jl:違いは何ですか?
- 27. twistdとnohup&:違いは何ですか?
- 28. libspeとlibspe2?違いは何ですか?
- 29. Backbone.jsとPusherapp - 違いは何ですか?
- 30. wp_link_pagesとthe_posts_pagination→違いは何ですか?
"mongodbでは、各シャードはレプリカセットです" - これは真実ではありません。個々のサーバーをシャードとして追加することができます。 –
@SergioTulentsev:ありがとうございました。理想的にはあなたのシャード*はレプリカセットにする必要がありますので、いくつかの冗長性/フェールオーバーがあります。同様に、レプリカセット*は複数のサーバで実行する必要があります(ただし、技術的には、そうする必要はありません)。 – Stennie
"builds on replication"句を削除することをお勧めします。それは上に構築されません。 2つのものは完全に直交しています。 :) –