8

インデックスが存在するかどうかを確認するにはどうすればよいですか? - 電話する前に:

IndexCreation.CreateIndexes(typeof(MyIndexClass).Assembly, documentStore);

私が見たすべての例 (サンプル プロジェクトのものを含む) では、クライアントが起動されるたびにインデックスが再作成されていましたが、これは正しくないようです。

また、一般的な戦略は何ですか?通常の CRUD 操作と、上記のインデックス作成などの管理コマンドがあるようです。人々は、管理を行うコンソール アプリを作成し、それをメイン アプリとは別に展開/実行しますか?

4

2 に答える 2

18

存在を確認する必要はありません。サーバーは、送信されたインデックス定義を自動的に比較し、既に存在するかどうかを確認します。同じ名前と定義を持つものが存在する場合は、そのままにしておきます。同じ名前のものが存在するが、定義が変更されている場合、古いものは削除され、新しいものが作成されます。

通常、アプリケーションの起動時に、同じアプリケーションでインデックスを作成します。global.asax にある可能性のある Web アプリの場合、およびコンソール/デスクトップ アプリの場合は、スタートアップ コードの最初の部分になります。

ただし、マルチテナント アプリケーションでよくあるように、多数の異なるデータベースがある場合など、それが不可能な場合もあります。このような場合、各テナント データベースを作成するときにインデックスを作成し、バージョン アップグレードをロールアウトするときに、更新または追加のインデックスの作成が必要になる場合があります。

また、いくつかの異なる方法でインデックスを作成できることにも言及する必要があります。

// scans the assembly for all indexes and creates them
IndexCreation.CreateIndexes(assembly, documentStore);

// scans a MEF catalog for all indexes and creates them
IndexCreation.CreateIndexes(catalog, documentStore);

// puts a single index the HARD way
documentStore.DatabaseCommands.PutIndex(...);

// puts a single index the easy way
documentStore.ExecuteIndex(new YourIndexCreationTask());

他にもいくつかありますが、あなたはアイデアを得るでしょう。

そして、徹底的に、インデックスの存在を本当に確認たい場合は、次を使用できます。

documentStore.DatabaseCommands.GetIndex("YourIndex") != null

しかし、それは定義ではなく名前でのみチェックします。そして、あなたはそれを必要としません。

于 2012-12-12T22:22:07.897 に答える