2016-03-08 27 views
0

缺省情况下,在_id字段上使用_id字段的自动索引的原因是什么?我们可以在docs找到:Capped集合和_id自动索引

没有这种索引开销,封顶集合可以支持更高的插入吞吐量。

有一个post约加盖收集插入性能和我自己的测试也表明,刀片加盖收集没有索引是最快的选项,然后正常收集去,和最慢的选项加盖收集与索引。那么为什么汽车索引在版本2.2中与_id字段一起添加,如果它达到了性能,而在某些情况下,封顶集合被提议作为正常集合的快速替代品?

回答

0

那么,我们当然也不能排除_id在封顶集合中的好处。它可以帮助您并且实际上需要进行复制。

默认情况下,MongoDB将其打开,因为在副本集配置中部署MongoDB现在非常正常。你可以找到更多的信息在documentation,请查找autoIndexId

我认为,慢的原因是指数,而不是_id领域本身。因此,如果您的要求保证特殊需求,您可以随时禁用自动索引。

但是......

你仍然需要用零(0)值提供_id领域。

例如禁用自动索引的2 GB上限集合。

db.createCollection("people", { capped: true, size: 2147483648, autoIndexId: false }) 

我相信这个技巧会带来插入速度。

+0

@Salem,谢谢你的回复。 autoIndexId实际上是我用来测试插入性能的东西。是的,如果你禁用它,插入会更快。但是保持启用的原因是什么?我现在唯一看到的是,对于副本集,所有集合都必须将autoIndexId设置为true。至于维护插入顺序:对于封顶收集,它也可以无索引地工作。 – wombatonfire

+0

是的,它维持广告订单,但没有保证。此外,MongoDB(公司)瞄准大规模可扩展性并与一些主要参与者竞争,因此他们称之为更有利于目标的更普遍使用,而不是某些特殊用途 – Saleem

+0

这是他们默认启用自动索引的原因。他们再次允许我们根据特殊情况下的需求调整MongoDB。 – Saleem