139

と/のマングースのドキュメントによると:MongooseJSMongoDBNode.js

アプリケーションが起動すると、Mongoose はensureIndexスキーマで定義された各インデックスを自動的に呼び出します。開発には適していますが、インデックスの作成はパフォーマンスに大きな影響を与える可能性があるため、本番環境ではこの動作を無効にすることをお勧めします。autoIndexスキーマのオプションを false に設定して、動作を無効にします。

これは、Mongoose を最適化するために展開する前に、mongoose から自動インデックス作成を削除するように指示しているように見えますが、アプリケーションの起動時にすべてのインデックスを調べてチャーンするように Mongo に指示することは理にかなっているようです。

本番コードでインデックス作成を処理する適切な方法は何ですか? おそらく、外部スクリプトがインデックスを生成する必要がありますか? またはensureIndex、単一のアプリケーションがコレクションに対する唯一のリーダー/ライターである場合、DB 書き込みが発生するたびにインデックスを継続するため、不要でしょうか?

編集:補足として、MongoDB はインデックス作成の方法に関する適切なドキュメントを提供していますが、明示的なインデックス作成ディレクティブを実行する必要がある理由時期については提供していません。インデックスは、既存のインデックスを持つコレクションでライター アプリケーションによって自動的に最新の状態に保つ必要があるように思われます。これは、実際には 1 回限りのことです (新しいインデックスが適用されているときに行われます)。その場合、Mongooseは通常のサーバー再起動では何もしません。ensureIndexautoIndex

4

3 に答える 3

151

マングースのドキュメントが本番環境での無効化を広く推奨している理由を私は理解していませんautoIndex。インデックスが追加されると、後続のensureIndex呼び出しは、インデックスがすでに存在することを確認してから戻ります。したがって、最初にインデックスを作成するときにのみパフォーマンスに影響します。そのとき、コレクションは空であることが多いため、インデックスの作成はとにかく迅速になります。

私の提案は、autoIndex問題が発生する特定の状況がない限り、有効のままにしておくことです。たとえば、何百万ものドキュメントがある既存のコレクションに新しいインデックスを追加し、それがいつ作成されるかをより細かく制御したい場合などです。

于 2013-01-15T21:05:15.023 に答える