3

ここのガイドを参照すると、http: //docs.mongodb.org/manual/core/indexes/ フィールドの Mongo インデックスが永続的に保存されているかどうかわかりません。

ensureIndex()を使用してアプリケーション内で が呼び出された (および完了した)場合、次の場合はMongoDBどうなりますか。

  1. 使用しているアプリケーションMongoDBが再起動されます。後続の呼び出しensureIndex()で完全な再インデックスが行われますか?
  2. MongoDBサーバーが再起動されます。ensureIndex()クライアント アプリケーションから後で を呼び出すと、再構築されますか?
  3. 複数のクライアント セッションを持つことによって影響を受けるものはありますか? ドキュメントごとに、インデックス作成はコレクション全体でグローバルであると想定しています。"MongoDB defines indexes on a per-collection level."
4

1 に答える 1

6

MongoDB を使用するアプリケーションが再起動されます。その後の ensureIndex() の呼び出しにより、完全な再インデックスが行われますか?

いいえ、インデックスが既に存在するため、(他のすべてのドライバーと同様に) no op として登録する必要があります。一部のドライバーは、インデックスが作成されているかどうかをサーバーに行かずに検出するためのキャッシュ メカニズムを提供します (Python など)。

MongoDB サーバーが再起動されます。クライアント アプリケーションからの ensureIndex() の後での呼び出しは再構築されますか?

同上

複数のクライアント セッションを持つことによって影響を受けるものはありますか? ドキュメントに従って、インデックス作成はコレクション全体でグローバルであると想定しています。「MongoDBはコレクションごとのレベルでインデックスを定義します。」

はい、インデックスはコレクション自体のMongoDBに保存されます(技術的には、db.nsファイル内の名前空間として)。これは 1 つの知識ポイントでensureIndexあり、インデックスは 1 つのプロセスであるため (実際には書き込みロックによく似ています)、インデックスの作成が 2 回登録されているかどうかにかかわらず、複数の接続は影響しません。

于 2013-01-15T08:14:45.983 に答える