2012-02-05 8 views
1

私はmongodbにかなり新しいです。私は、ラップトップ、ハードドライブ、ウェブカムなどの複数の製品を挿入して検索できるWebアプリケーションを作成しています...私の質問は、「コンピュータ」などの同じコレクションにすべてを配置するか、 "ラップトップ"、 "ハードドライバー"、 "ウェブカメラ"のような独自のコレクションを提供しています。たくさんもっと速く挿入して検索するために、mongodbに1つまたは複数のコレクションを作成する必要がありますか?

答えて

2

おかげで一般的に、あなたが保存している事の「種類」ごとに1つのコレクションを使用する必要があります話します。上記のすべての例が、製品の "タイプ"に該当し、同じコレクション内にあるはずです。同じコレクション内のドキュメントはすべて同じフィールドを持つ必要はありませんが、製品の場合は、名前、価格、製造元など、すべてのドキュメントで共通のフィールドがいくつかあります。ハードドライブにはすべてRPM、ストレージ容量、フォームファクタ、インタフェース(SATA2/3、IDEなど)があるように、各ドキュメントの「サブタイプ」には共通のフィールドがいくつかあります。

このアドバイスの根拠は、MongoDBクエリが一度に1つのコレクションで実行されるということです。あなたが持っている製品のさまざまなカテゴリーをカバーする検索結果を表示したい場合、これは1つのコレクションでは簡単ですが、いくつかの(そしてパフォーマンスの低い)ものではより難しくなります。

クエリのパフォーマンスに関する限り、検索対象のフィールドには必ずインデックスを作成してください。製品名または製造業者による検索を許可する場合は、名前に関するインデックスとメーカーの別のインデックスがあります。正確なインデックスは、ドキュメントにあるフィールドによって異なります。

(ただし、文書を保存または更新するたびに各インデックスが更新される可能性があるため)挿入速度が速くなるため、索引を作成しないようにしてください実際に必要です。

これらのトピックの詳細については、MongoDBのドキュメントschema designindexesと、10genのスピーカーとMongoDBユーザーのpresentations on 10gen.comを参照してください。

1

1つのコレクションから始めることをおすすめします。製品ごとのコレクションではなく、1つのコレクションを検索する方がはるかに簡単です。そして、将来コレクションのクエリが遅くなると、それらをスピードアップする方法について考え始めることができます。

Mongodbはかなり速くindexesであり、スケーラブルであるように設計されているので、一度データベースを拡張する必要があります。replica setsauto sharingを適切に配置します。

関連する問題