如何在生产模式下索引猫鼬字段,我为啥要禁用自动索引功能?

Posted

技术标签:

【中文标题】如何在生产模式下索引猫鼬字段,我为啥要禁用自动索引功能?【英文标题】:How to index mongoose fields in production mode, why should i disable autoindex feature?如何在生产模式下索引猫鼬字段,我为什么要禁用自动索引功能? 【发布时间】:2016-04-09 12:31:20 【问题描述】:

我正在制作一个android 应用程序,我在服务器端使用 nodeJSmongoDB,现在实际上直到现在我都在开发中进行编码,但是现在我希望我的应用程序能够投入生产,现在当我阅读有关 mongoose 的文档时,他们写道:

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

现在谁能告诉我这是什么,我的意思是,我现在已经索引了一些字段为什么禁用自动索引,我没有索引每个字段,只是其中一些我之前在 上也看到过这个问题***,但是没有人详细解释这个,我已经在这里阅读了答案

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

还有一个问题,我只是想知道,由于我的所有索引都在我的 mongoDB 部分,所以即使在架构级别描述它们有什么用,我的意思是这样认为每个操作 CRUD事情发生在数据库和数据库级别上,我们已经定义了所有索引,所以我们为什么要再次在架构级别索引它们请回答我对此很陌生,这就是为什么对此不太了解我知道我错过了这个谜题,但如果有人能分享一些关于这个问题的知识,那将是非常有帮助的。

【问题讨论】:

【参考方案1】:

问题 1:为什么要在生产环境中禁用 autoMigrate?

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

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

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

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

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

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

【讨论】:

以上是关于如何在生产模式下索引猫鼬字段,我为啥要禁用自动索引功能?的主要内容,如果未能解决你的问题,请参考以下文章

索引猫鼬时间戳

我应该在哪里在猫鼬中创建索引

Nest.js - 在猫鼬模式中创建索引

用对了这些场景下的索引,技术总监夸我棒

Mysql索引为啥用B+树

Mongo:$exists 字段的索引