如何在生产模式下索引mongoose字段,为什么要禁用自动索引功能?

时间:2016-01-05 15:53:28

标签: node.js mongodb indexing mongoose

我正在制作一个android应用,我在服务器端使用 nodeJS mongoDB ,现在实际上到目前为止,我正在开发所有代码但是现在我想让我的应用程序投入生产,现在当我阅读mongoose的文档时,他们已经写了:

  

当您的应用程序启动时,Mongoose会自动为架构中的每个已定义索引调用ensureIndex。虽然很适合开发,但建议在生产中禁用此行为,因为创建索引会对性能产生重大影响。通过将架构的autoIndex选项设置为false来禁用该行为

现在任何人都可以告诉我这是什么,我的意思是,我有一些字段,我现在已编入索引为什么禁用autoIndex,我没有索引每个字段只是其中一些我之前也看过这个问题 StackOverflow ,但没有人详细解释过这个问题,我在这里已经阅读了答案

Mongoose indexing in production code
Mongoose call ensureIndex on startup, but it's not recommended. So why it's default?

还有一个问题我只是想知道因为我的所有索引都在我的 mongoDB 部分,所以即使在模式级别中描述它们的用途是什么,我的意思是这样每个操作CRUD每个事情发生在数据库和数据库级别我们已经定义了所有索引,所以为什么我们应该再次在模式级别索引它们请回答我是非常新的这就​​是为什么我不知道这很多我知道我错过了一些大的这个难题的一部分,但如果有人可以就此分享一些亮点,那将会非常有用。

1 个答案:

答案 0 :(得分:0)

问题1:为什么要在生产环境中禁用自动迁移?

对于许多项目来说,生产数据库比开发数据库要大得多,因此,如果在应用程序启动时迁移数据库(添加新索引等),则会遇到很多意外停机。

最佳实践是在应用程序生命周期之外进行大量生产迁移,方法是使用migration framework或直接在生产实例上手动创建索引。

问题2:为什么我需要在猫鼬中创建索引?

您并非严格需要-您可以将它们排除在架构定义之外,而总是直接在mongodb中创建索引。

但是它们给您带来一些便利:在启用了自动迁移的开发环境中,在架构上定义索引允许mongoose代表您在dev mongodb中创建索引。

如果您如上所述使用migrate-mongoose,也可以将其用于生产迁移。这样可以减少重复并减少人为错误的空间。