【问题标题】:Capped collections and _id auto index上限集合和 _id 自动索引
【发布时间】:2016-06-22 08:19:54
【问题描述】:

默认情况下,为 _id 字段设置上限集合的自动索引的基本原理是什么?我们可以在docs 中找到:

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

有一个post 关于封顶集合插入性能,我自己的测试也表明,对于插入封顶集合没有索引是最快的选择,然后是正常的集合,最慢的选择是带有索引的上限集合。那么为什么在 2.2 版本中添加自动索引和 _id 字段,如果它达到性能,而在某些情况下建议使用上限集合作为普通集合的快速替代方案?

【问题讨论】:

    标签: mongodb indexing capped-collections


    【解决方案1】:

    好吧,我们当然也不能排除 _id 在上限集合中的好处。它可以帮助您,实际上是复制所必需的。

    MongoDB 默认打开它,因为现在在副本集配置中部署 MongoDB 非常正常。您可以在documentation找到更多信息,请查找autoIndexId

    我相信,缓慢的原因是索引,而不是 _id 字段本身。因此,如果您的要求有特殊需要,您可以随时禁用自动索引。

    但是……

    您仍然需要为 _id 字段提供零 (0) 值。

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

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

    我相信这个技巧会让插入速度恢复。

    【讨论】:

    • @Salem,感谢您的回复。 autoIndexId 实际上是我用来测试插入性能的。是的,如果你禁用它,插入会更快。但是保持启用它的原因是什么?我现在唯一看到的是,对于副本集,所有集合都必须将 autoIndexId 设置为 true。至于维护插入顺序:对于有上限的集合,它也可以在没有索引的情况下工作。
    • 是的,它维护插入顺序,但不能保证。此外,MongoDB(公司)的目标是大规模可扩展性并与一些主要参与者竞争,因此他们认为将其定位为更常见的用途而不是一些特殊用途更有利
    • 这是他们默认启用自动索引的原因。它们再次允许我们在特殊情况下根据我们的需要调整 MongoDB。
    • 文档告诉我们“上限集合保证插入顺序的保留。因此,查询不需要索引来按插入顺序返回文档。” (docs.mongodb.org/manual/core/capped-collections/…)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2013-08-25
    • 2016-12-15
    • 2023-03-06
    • 1970-01-01
    • 2014-07-15
    相关资源
    最近更新 更多