2010-12-30 5 views
0

私は、それぞれ固有のIDと他のものを持つユーザーオブジェクトを含むコレクションを持っています。このコレクションは数百万のエントリを持つことができます。私の質問は、300 UIDSのリストを取って、どれがコレクションに存在するかを確認するクエリがどれくらい費用がかかりますか?MongoDBのデータベース全体のクエリはどれくらいの費用がかかりますか?

答えて

0

私はこの質問#1に2つの部分があると思います:クエリ、#2:パフォーマンス。

1:クエリは

これは簡単に$in clauseを使用して行うことができます。

2:パフォーマンス

$in句についての事は、DBの観点からこれを行うための唯一の論理的な方法があるということです。基本的には、あなたが持っている商品ごとに1つのインデックス検索を行います。

標準プロトコルに従って、すべてのインデックスをRAMに保存すると、このクエリはおそらく2秒ほどかかるでしょう。私は何百万という100億のサーバーを持っており、このような100個の「UIDS」の検索が約500ミリ秒後に戻ってきます。

YMMV。サーバー上で複数のスレッドが実行されていることを確認するために、複数の同時クエリを実行して、パフォーマンスを向上させることができます。

+0

私は、 "userid"というキーを持つ何百万ものドキュメントのコレクションを持っていて、コレクションにあるかどうかを知りたい "somepeople"のセットを持っているとします、useridとsomepeopleの間)、正しいクエリーは次のようになります:db.collection.find({"userid":{$ in:somepeople}})?あなたは、どのようにRAMにインデックスを保持すると述べた?そしてインデックスについて言えば、$ inをコールする前に毎回db.collection.ensureIndex({userid:1})を呼び出す必要があると考えて正しいですか? UserIDがプライマリキーであっても必要ですか(上記で嘘をついた "userid"は実際に "_id"です) – lms

+0

多くの質問があります。まず、ここでは '_id'がおそらく正しいユーザーでしょう。 '_id'は自動的にインデックスを持っているので、あなたはそれをカバーしていますので、毎回' ensureIndex'を呼び出す必要はありません。 "インデックスをRAMに保存する":インデックスのサイズ( 'db.users.stats()')を見てください。そのサイズは、あなたが持っているRAMの量より少なくする必要があります。 MongoDBは、インデックスをRAMに保存し、速度を維持するために最善を尽くします。しかし、インデックスが4GBでRAMが2GBしかない場合は、このすべてが遅くなります。 –

関連する問題