2016-06-12 89 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 

是這種做法是罰款還是要我創建了一個差異收集和與每一個學生名單作爲一個單獨的文檔,(每個樣品DOC將有多個學生ID,它可以跨越差異樣本文檔是常見的)

+0

mongo的哪個版本?你使用什麼類型的存儲引擎? – profesor79

+0

現在MLAB免費計劃 – Bikash

+0

沙盒\t使用mongo 3.0.x – profesor79

回答

0

爲什麼索引每次插入更新的原因都與文檔大小及其分配有關。假設文檔有1765個字節,並且我們添加了接下來的950個字節(data + bson開銷),它可以執行給定文檔的重定位,因爲它不適合當前分配的數據塊 - >和db引擎需要更新所有索引中的指針以指向新的文檔位置。

+0

哦,現在我明白了,謝謝! 那麼比在我的情況下哪種方法會更明智?嵌入文檔或單獨的集合,這些集合將參考主樣本文檔 – Bikash