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