1. ホーム
  2. node.js

[解決済み] プロダクションコードでの Mongoose インデックス作成

2022-05-31 10:17:44

質問

マングースあたり ドキュメント に対して MongooseJSMongoDB / Node.js :

アプリケーションが起動すると、Mongoose は自動的に ensureIndex を呼び出します。インデックスを作成するとパフォーマンスに大きな影響を与えるので、開発環境ではこの挙動を無効にすることを推奨します。この挙動を無効にするには autoIndex オプションを false に設定することでこの動作を無効にできます。

これはデプロイ前に mongoose から自動インデックスを削除するように指示しているようで、アプリケーション起動時に Mongo にすべてのインデックスを巡回させるように指示することから Mongoose を最適化しているようです。

実運用コードでインデックスを処理する適切な方法は何でしょうか? 外部スクリプトがインデックスを生成すべきなのでしょうか? あるいは ensureIndex は不要なのでしょうか?

編集してください。 補足すると、MongoDBは優れた ドキュメント を提供しています。 どのように でインデックスを作成しますが なぜ または いつ のような明示的なインデックス作成ディレクティブを行うべきでしょう。 インデックスが存在するコレクションに対して、ライターアプリケーションが自動的にインデックスを最新に保つべきであると思われます。 ensureIndex は一回限りのもの (新しいインデックスが適用されるときに実行される) であり、その場合 Mongoose の autoIndex は通常のサーバー再起動では動作しないはずです。

どのように解決するのですか?

Mongoose のドキュメントでは、なぜ大々的に autoIndex を無効にすることを推奨している理由が理解できません。 いったんインデックスが追加されると、その後の ensureIndex の呼び出しは、単にインデックスが既に存在していることを確認してから返します。 したがって、パフォーマンスに影響を与えるのは最初にインデックスを作成するときだけで、その時点ではコレクションが空であることが多いので、インデックスの作成はいずれにせよ迅速に行われます。

私の提案は autoIndex 例えば、何百万ものドキュメントを持つ既存のコレクションに新しいインデックスを追加し、それがいつ作成されるかをもっと制御したい場合などです。