【发布时间】:2012-12-29 20:16:59
【问题描述】:
对于 MongooseJS 和 MongoDB/Node.js 的猫鼬 documentation:
当您的应用程序启动时,Mongoose 会自动为您架构中定义的每个索引调用
ensureIndex。虽然很适合开发,但建议在生产中禁用此行为,因为创建索引会导致显着的性能影响。通过将架构的autoIndex选项设置为 false 来禁用该行为。
这似乎指示在部署之前从 mongoose 中删除自动索引,以优化 Mongoose,使其不再指示 Mongo 在应用程序启动时遍历所有索引,这似乎是有道理的。
在生产代码中处理索引的正确方法是什么?也许外部脚本应该生成索引?或者,如果单个应用程序是集合的唯一读取器/写入器,那么 ensureIndex 可能是不必要的,因为它会在每次数据库写入发生时继续索引?
编辑:作为补充,MongoDB 提供了很好的documentation 用于如何 进行索引,但没有为什么 或何时 应该使用明确的索引指令。在我看来,索引应该由编写器应用程序自动在具有现有索引的集合上保持最新,ensureIndex 实际上更像是一次性的事情(在应用新索引时完成),在这种情况下 Mongoose 的autoIndex 应该是正常服务器重启下的空操作。
【问题讨论】:
-
最好使用单独的脚本进行索引,该脚本不会在每次部署时都执行。更多的是从维护的角度来看。否则,某些开发人员有一天会为已经拥有数百万条记录的集合添加一些索引,然后可能会导致重大业务损失。