2016-06-12 6 views
1

私は複数のインデックスを持つコレクションを持っており、しばしばそのコレクションの配列にいくつかのデータをプッシュする必要があります。私はMongoDBのドキュメントを通過しようとしましたが、私は得ることができる最高だった、国連索引フィールドに挿入および更新のために

、スパースインデックスのオーバーヘッドが非スパースインデックスよりも小さいです。非スパースインデックスの場合でも、レコードサイズを変更しない更新では、インデックスのオーバーヘッドが少なくなります。

私は疎インデックスと非疎インデックスの違いを認識しており、疎インデックスのオーバーヘッドはそれほど大きくないと考えています。

なぜ、私のドキュメントのインデックスのないフィールドだけを更新していても、他のすべてのインデックスを更新する必要があるのはなぜですか。それはすべてのインデックスが同じデータを持ち、すべてのデータを更新する必要があるからですか?

マイドキュメント

var sample = new Schema({ 
    *** 
    student_list: [ {type :Schema.Types.Mixed}], 
    location: [ {type :Schema.Types.Mixed}], 
    **** 
}); 
student_list.studID will be indexed 

{studID:1,city:M,Time:"... e} 

は、今私は、多くの場合、場所フィールドを更新する必要があります。

db.sample.find({student_list.studID:"studid"}) 
db.sample.find({student_list.studID:"studid", student_list.city:"M"}) 
all using student_list_studId_1 index 

問い合わせこのアプローチは大丈夫ですか、それとも私が差分コレクションを作成するものとし、別々のドキュメントなど、すべての生徒のリストと、(すべてのサンプルドキュメントは、差分サンプルドキュメント全体に共通することも、複数の学生のIDを持っています)

+0

mongoのどのバージョンですか?どのタイプのストレージエンジンを使用していますか? – profesor79

+0

今のところMLabフリープラン – Bikash

+0

サンドボックス\tはmongo 3.0.xを使用しています – profesor79

答えて

0

インサートごとにインデックスが更新される理由は、ドキュメントのサイズとその割り当てに関連しています。

文書には1765バイトがあり、次の950バイト(データ+ bsonオーバーヘッド)が追加され、現在割り当てられているデータブロックに適合しないため、指定された文書の再配置が実行される可能性があります。新しい文書の場所を指すようにすべての索引のポインタを更新する。

+0

オハイオ州、これは感謝です! 私の場合よりも、どのアプローチがより賢明でしょうか?主要なサンプル文書への参照を持つ文書または別個のコレクションを埋め込んでいる – Bikash

関連する問題