6

数十のコレクションを持つ最大3GBのmongoデータベースがあります。これらのコレクションのうち3つは、1秒あたり最大300のクエリを処理しますが、残りははるかに少ないボリュームを維持します。トラフィックは急速に増加し続けると思います。

トラフィックの多いコレクションを処理するためのレプリカセットを設定したいと思います。この新しいインスタンスがデータベースの残りの部分を複製する必要はありません。これは可能ですか?

4

3 に答える 3

2

現時点では、mongodbの組み込み機能では不可能なようです。そのための唯一の方法は、独自の手動レプリケーションアルゴリズムを考案するか、サードパーティによって作成された他のツールを使用することです。

https://github.com/wordnik/wordnik-ossプロジェクトは、次の投稿に従ってこれを達成するのに役立つ可能性があります。

https://groups.google.com/forum/?fromgroups=#!topic/mongodb-user/Ap9V4ArGuFo

レプリケーションでドキュメントをフィルタリングするための回避策について説明します。

MongoDBで{'public':true}のドキュメントのみを複製する

または、データを手動で複製するだけで、試す価値があるかもしれません。

幸運を。

于 2013-01-22T22:32:27.190 に答える
1

いいえ、それは今は不可能です。あなたができることは、それらのコレクションを別の複製されていないデータベースに移動することです。ただし、これらのコレクションのトラフィックも増えると、頭痛の種になるため、コレクションを「レプリケーション」データベースに移動する必要があります。

ただし、一般に、レプリケーションはスケーリングが必要な場合に実行する方法ではなく、DR/フェイルオーバーの対象として考慮されます。レプリカセットセカンダリは(オプションで)読み取りクエリにのみ応答できますが、書き込みクエリには応答できません。これは覚えておく必要があります。したがって、書き込み負荷が高い場合、これで問題が解決しない場合があります。
アプリケーションがセカンダリから読み取ることを許可したら、結果整合性を維持する必要があります。つまり、アプリケーションが常に最新のデータを表示することが保証されているわけではありません。これは、セカンダリへの非同期レプリケーションが原因で発生します。
実際、writeconcernを構成すると、この問題を解決できます。これにより、書き込みが行われたと見なされてドライバーが戻る前に、すべてのレプリカで書き込みが成功する必要があります。ただし、これにより書き込み操作が大幅に遅くなる可能性があります。

したがって、クエリ実行機能をスケーリングするために、Shardingを使用します。これはコレクションごとのレベルで可能であり、シャーディングされていないすべてのコレクションは「デフォルトシャード」のままになります。

于 2013-01-23T09:59:07.843 に答える
0

不可能ですが、データサイズが非常に小さく、これらのコレクションが更新されない場合、それらを複製することの唯一のオーバーヘッドは、セカンダリのストレージサイズが小さいことです。これは、特にコレクションのサイズが大きくならないため、独自のレプリケーションロジックを作成する場合に比べて、比較的低額です。

于 2013-01-23T16:06:52.627 に答える