2011-06-23 21 views
54

MongoDBは高速ですが、ワーキングセットまたはインデックスがRAMに収まる場合のみです。だから私のサーバが16GのRAMを持っているなら、それは私のすべてのコレクションのサイズが16G以下である必要があるということですか? "これは私の作業セットで、残りは"アーカイブされる "とはどういう意味ですか?MongoDBのRAMに「ワーキングセット」を入れるのはどういう意味ですか?

+2

FYIでは、作業セットの現在のサイズを推定するには、「db.runCommand({serverStatus:1、workingSet:1})」を実行します。 「MongoDBデータベースの作業セットは、クライアントが最も頻繁にアクセスするデータの部分です」http://docs.mongodb.org/manual/faq/diagnostics/ – AnneTheAgile

答えて

62

「ワーキングセット」は、基本的に、システムによってアクティブ/使用されるデータおよびインデックスの量です。

たとえば、1年間分のデータがあるとします。簡単にするために、各月は1GBのデータに関連して合計12GBを提供し、毎月のデータ量をカバーするために1GBのインデックスがあり、今年度は合計12GBです。

常に最新の12か月分のデータにアクセスしている場合、作業セットは12GB(データ)+ 12GB(インデックス)= 24GBです。

ただし、実際に過去3か月分のデータにしかアクセスしない場合、作業セットは3GB(データ)+ 3GB(インデックス)= 6GBです。このシナリオでは、8GBのRAMがあり、過去6か月分のデータに定期的にアクセスすると、使用可能なRAMを超えてパフォーマンスが低下します。

しかし、一般的には、頻繁にアクセスすると予想されるデータ/インデックスの量をカバーするのに十分なRAMがあれば、問題ありません。

編集:レスポンスコメント
に質問する私は、私は非常に従わわからないんだけど、私が留守に行く必要があります。まず、ワーキングセットの計算は "ボールパークの図"です。第2に、user_idに1GBのインデックスがある場合、一般的にアクセスされるそのインデックスの部分だけがRAMにある必要があります(たとえば、50%のユーザーが非アクティブであるとすると、0.5GBのインデックスが頻繁に使用されるRAMに必要/必要)。一般に、使用しているRAMが多ければ多いほど、特にワーキングセットが使用量の増加に伴い時間の経過とともに大きくなる可能性が高くなります。これは、シャーディングが行われる場所です。複数のノードにまたがってデータを分割することで、費用効果的にスケールアウトすることができます。あなたのワーキングセットは複数のマシンに分かれています。つまり、RAMにもっと多くのものを保存することができます。より多くのRAMが必要ですか?他のマシンを追加して、にシャードします。

+0

例を使用していただきありがとうございます;-) ...もしそのサイトがソーシャルネットワーキングサイトと言えば、それは何か。 (NoSQLが仕事などのための正しいツールであるかどうかについては議論しません)。あなたは何百万人ものユーザーを持っています。それは私が想定している巨大なテーブルになるはずです。あなたはワーキングセットをどのように定義しますか?私は私の質問は、どのように作業セットを定義すると思いますか?私が "user_id"を索引付けすると、それは明らかにすべての私のユーザーのためにユーザーコレクションを必要とします。私は指定することはできません、3ヶ月前からユーザーを引き出すだけですか? – luckytaxi

+0

@luckytaxi - 私は(うまくいけば)上記の私のアップデートでもう少し答えました! – AdaTheDev

+0

Doh、シャーディングを忘れました。私は私の質問が「あなたがどのようにあなたの「ワーキングセット」として次のデータを保持するようにモンゴーに伝えますか?」と指摘しています。ユーザーの50%が非アクティブな場合、どのようにRAMにロードしませんか? – luckytaxi

5

作業セットは基本的にあなたが最も頻繁に使用しているものです。文書のサブセットでは、作業セットと考えることができます。最も一般的に使用されている構造の部分がメモリに収まる限り、作業は非常に高速になります。

はい、ほとんどのデータは「アーカイブ」されており、アプリケーションのパフォーマンスに影響を与えることはほとんどありませんが、データは大量にある可能性があります。 (アーカイブされたデータを含まない)作業セットに影響を与えます。

0

私はインデックスがBツリーであることを理解しました。データがラムに収まるサイズを超えている場合、どうしてそんなに重要なのでしょうか? Bツリーはかなり高速であり、ディスクアクセスを非常に大きく減少させます。なぜ心配?

+0

これを回答としてではなく、別の質問として投稿することを検討してください。要するに、インデックスのサイズが使用可能なメモリのサイズを超えると、インデックスの一部にアクセスするためにディスクから読み取る必要があります。ディスクからの読み込みは、メモリから読み込むよりもはるかに遅いです。 – Puhlze

関連する問題