默认情况下,为 _id 字段设置上限集合的自动索引的基本原理是什么?我们可以在文档中找到:
如果没有这种索引开销,上限集合可以支持更高的插入吞吐量。
有一篇关于封顶集合插入性能的帖子,我自己的测试也表明,对于插入封顶集合没有索引是最快的选择,然后是普通集合,最慢的选项是带索引的封顶集合。那么为什么在 2.2 版本中自动索引与 _id 字段一起添加,如果它达到性能,而在某些情况下,上限集合被提议作为普通集合的快速替代品呢?
好吧,我们当然也不能排除 _id 在上限集合中的好处。它可以帮助您,实际上是复制所必需的。
MongoDB 默认打开它,因为现在在副本集配置中部署 MongoDB 非常正常。您可以在文档中找到更多信息,请查找 autoIndexId
我相信,缓慢的原因是索引,而不是 _id 字段本身。因此,如果您的要求有特殊需要,您可以随时禁用自动索引。
但...
您仍然需要为 _id 字段提供零 (0) 值。
例如,禁用自动索引的 2 GB 上限集合。
db.createCollection("people", { capped: true, size: 2147483648, autoIndexId: false } )
我相信这个技巧会让插入速度恢复。