我应该在启动时还是在脚本中确保MongoDB索引?

时间:2014-08-22 23:56:13

标签: mongodb

我正在使用GeddyJs构建一个可扩展的应用程序。

我将使用MongoDB,做一些db.model.ensureIndex(...)是我必须做的事情。

这是我应该放在哪里,例如Jake脚本?这是我应该在服务器启动时始终运行的东西吗?

我应该从命令行执行一次,配置生产数据库吗?这样的东西有没有设计模式?

1 个答案:

答案 0 :(得分:1)

关于索引构建的警告

MongoDB中的前景索引构建(在2.6处)是一个阻止操作,阻止所有读取&在索引构建时写入受影响的数据库。在确保具有合理数据量的现有集合的索引时,您需要谨慎行事。与MongoDB 2.6一样,每个数据库只支持一个并发前台索引构建。

Background index builds初始构建需要更长时间,并且在初始空间使用方面通常效率较低,但如果您意外触发索引构建,则会避免意外停机。构建后,这些索引在功能上与任何其他索引相同("后台"方面仅适用于初始索引创建,而不适用于后续更新)。 MongoDB 2.4或更高版本支持多个并发后台索引构建。

确保新/空集合的索引

如果要确保新/空集合的索引,确保启动索引是安全的。

使用数据

确保现有集合的索引

如果您要确保可能包含数据的集合的索引,我建议您:

  • 通过维护脚本构建索引,以便您可以控制何时构建新索引(即作为生产部署的一部分)。

OR

使用副本集部署确保索引

如果您的MongoDB部署是副本集,还有一些进一步的考虑因素:

  • MongoDB 2.6增加了对辅助服务器后台构建的支持。

  • 在MongoDB 2.4或更早版本中,在主服务器上构建的后台索引将成为辅助服务器上的前台索引构建。如果所有辅助设备最终同时在前台构建大型索引,这可能是一个严重的问题,因为复制到受影响的数据库将被阻止,直到前台索引在辅助设备上构建完成。

  • 您可以通过滚动更新在一个节点上构建来最小化大型索引构建的影响(即,在独立模式下一次在辅助节点上构建索引,然后最终降级并添加索引在前小学)。

  • 有关详细信息,请参阅:Build Indexes on Replica Sets