336GBのデータを持つmongodbがあります。
残念ながら、そのサーバーには 8GB のメモリしかありません。
特にコレクション全体をトラバースしようとすると、これによりデータベースが遅くなるというのは本当ですか?
パフォーマンスを向上させるにはどうすればよいですか?
336GBのデータを持つmongodbがあります。
残念ながら、そのサーバーには 8GB のメモリしかありません。
特にコレクション全体をトラバースしようとすると、これによりデータベースが遅くなるというのは本当ですか?
パフォーマンスを向上させるにはどうすればよいですか?
物事を正しくするために、これは「大きな」プロダクションセットアップではありません。実際には比較的小さいです。
それはさておき:
特にコレクション全体をトラバースしようとすると、データベースの速度が低下すると言うのは本当ですか?
はい、そうです。コレクションを反復処理すると、MongoDBはデータをページインする必要があります。これは、コレクションにインデックスがある場合でも当てはまります。
これの例外は、indexOnly
カーソルを使用する場合です。これにより、返されたドキュメントを含め、すべてのデータがインデックスからのみ取得されます。これらは、カバードクエリとも呼ばれます。
ここでの問題は、すべてのRAMの使用が許可されていると仮定すると、データセットがRAMの量の42倍になることです(もちろん、これは当てはまりません。OSや他のプログラムは自分たちのために量を予約します)。これは、コレクション全体を反復することを期待している場合、パフォーマンスを向上させることができないことを意味します。代わりに、MongoDBが割り当てられたメモリをページスラッシングする可能性があります。
パフォーマンスを向上させるために何ができますか?
もう少しRAMを取得します。
その1台のサーバーでRAMを使いすぎるのが面倒な場合は、少しシャーディングを試すこともできます。
RAMの約20倍のデータを目指しますが、ほとんどの場合、それほど悪くはありません。
パフォーマンスを向上させるには、コレクションhttp://docs.mongodb.org/manual/applications/indexes/にインデックスを付ける必要がありますが、インデックスをクエリするときにmongodbによってメモリが使用されるため、作成する各インデックスがメモリ内に収まるようにしてください。あなたはあなたのサーバー上にいます。
コレクションをシャーディングすることもできますが、これを行うにはより多くのサーバーが必要になります。http://docs.mongodb.org/manual/sharding/
そして、私はそれが明白であることを知っていますが、より多くのメモリを取得します-それは安いです!
Mongodbは、メモリマップトファイルを使用して、データをシステムの仮想メモリにマップします。システムの使用可能なメモリよりも多くのデータにアクセスしようとすると、パフォーマンスが低下します。シャーディング、インデックス作成、RAMの増加など、他のオプションを検討する必要があります。インデックス作成にはメモリも必要なため、インデックス作成はパフォーマンスを向上させる可能性がありますが、大規模なデータセットで実行した場合はそれほどではありません。いくつかの参考文献:
最初の3つの質問は、メモリマップトファイルについて説明しています:http://docs.mongodb.org/manual/faq/storage/
シャーディングについて:http://docs.mongodb.org/manual/faq/sharding/
インデックスがRAMに確実に収まるようにする:http://docs.mongodb.org/manual/applications/indexes/#ensure-indexes-fit-ram
他の回答は、「データに適合するのに十分なメモリがある」、「各インデックスに十分なメモリがある」、または「データにRAMの倍数がある」のいずれかです。それらのどれも、キャパシティプランニングにとって非常に効果的でも正確でもありません。
アクセスパターンを把握してから、データを効果的に使用するために必要なインデックスを決定する必要があります。すべてのインデックスが利用可能なRAMに収まり、最近触れたドキュメント用に余裕がある場合は、問題ないはずです。
ワーキングセット(アクセスされたデータ+インデックス)がRAMに収まらない場合、パフォーマンスは他の何よりもディスクアクセス速度とより相関します。ディスクの速度とスループットおよび遅延の要件に応じて、正常に機能する場合と機能しない場合があります。
この特定のマシンで成功するか失敗するかを確実に伝えるのに十分な情報はありませんが、インデックス作成のニーズなどを分析することで、自分でそれを判断するのに十分な情報を収集できるはずです。