本番コードでのMongooseのインデックス作成 質問する

本番コードでのMongooseのインデックス作成 質問する

マングースによればドキュメンテーションおよび/ :MongooseJSMongoDBNode.js

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

これは、アプリケーションの起動時に Mongoose がすべてのインデックスを順に調べるように指示するのを最適化するために、デプロイ前に Mongoose から自動インデックスを削除するように指示しているようです。これは理にかなっているようです。

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

編集:補足として、MongoDBは優れたドキュメンテーションのためにどうやってインデックス作成を行うが、なぜまたはいつ明示的なインデックス作成指示を行う必要があります。既存のインデックスを持つコレクションでは、ライター アプリケーションによってインデックスが自動的に最新の状態に保たれるべきであり、これはensureIndex実際には 1 回限りの作業 (新しいインデックスが適用されるとき) であると思われます。この場合、Mongoose はautoIndex通常のサーバー再起動では何も行わないはずです。

ベストアンサー1

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

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

おすすめ記事