2011-08-12 11 views
0

タイトルが示唆しているように、Mongoで重いデータを書き込むために2番目のデータベースを使用していますか?たとえば、投票(スタックオーバーフローの質問のようなオブジェクトの投票)とページビュー情報の場合、第1のデータベースのオブジェクトを参照するドキュメントで第2のデータベースを保持するのは理にかなっていますか?MongoDBで重いデータを書き込むために2番目のデータベースを使用する

また、すべてを1つのデータベースに入れるのが理にかなっていますか?

ユーザーにすぐに表示する必要がない書き込み(ページビュー数の書き込みや更新など)では、多くのアプリケーションがmemcacheのような中間層にデータを書き込んだ後、ある期間。私は今のところこのようなシステムを作りたくないのです。

答えて

3

「第2のデータベース」とは、書き込みロック競合を減らすための2番目のmongodプロセスを意味する場合は、ソリューションが役立ちます。シャーディングは基本的に追加の書き込み(および読み取り)スループットを提供しますが、はるかに柔軟性があり、アプリケーションに依存しません。

1つのmongodプロセスで2番目のデータベースを作成する場合は、まったく役に立ちません。 Mongoの書き込みロックはmongodプロセス全体に広がっています。

更新:MongoDB 2.2以降では、プロセスレベルではなくデータベースで書き込みロックが発生するため、複数の論理データベースを使用すると書き込みロック競合が減少します。

+0

私が探していたものはまさにありがとうございました。 – Marc

+0

メモMongo 2.2はdbレベルでロックされます http://blog.serverdensity.com/goodbye-global-lock-mongodb-2-0-vs-2-2/ –

+0

True、これは少し古くなっています。更新する。 –

0

2.0のMongodには、保有するロックがあります。つまり、更新したものがメモリ内にあり、ページフォールトがない場合、ロックを生成しない場合はすぐに更新されます。 1つのmongodにグローバルロックが設定されているため、回避する唯一の方法は複数のmongodを持つことになりますが、これは新しいレベルの複雑さをもたらします。 アクティブなすべてのデータセットをメモリに保存して管理する場合、アプリケーションのニーズとデータセットによってまったく異なります。 mongoの重い書き込みをするための銀色の弾丸ではないことに注意してください。

プロダクションに行く前に、アプリケーションのベンチマークを行うことをお勧めします。

関連する問題