0

現在、RavenDB の静的インデックスをいくつか作成して、パフォーマンスを向上させたいと考えています。

しかし、RavenDB のドキュメントを読んでいるときに、私の本来の意図を本当に再考させられた特定の文が 1 つありました。

したがって、アプリケーション内のほとんどの操作を静的インデックスに基づいて行うか、少なくとも動的インデックス作成によって作成された一時インデックスが永続インデックスに昇格されていることを確認することをお勧めします。

私のソリューションは非常に大きく、必要なインデックスもわかりません。ソリューション全体を調べて、他のすべての操作に対して静的インデックスを作成する必要があります。大げさかもしれませんが、それでも... そのすべての作業がそれだけの価値があるかどうかはわかりません。

私の質問は:

一時インデックスが永続インデックスに昇格されたことを確認するにはどうすればよいですか?

編集:

私が学んだことは、一部のインデックスが永続的/静的な自動インデックスに昇格され、Raven サーバーを再起動しても失われないという事実です。私が理解したのは、それが Server に依存しているということConfiguration optionsです。そのため、インデックスの一部が永続的に昇格され、再起動すると一時的なものだけが失われました。それでも私の疑問は残ります。

EDIT2:

元の質問を編集し、より多くの情報を収集しました。私を本当に愚かな人だと思ってください。説明が必要です。次のようなことで私を混同しないでください"permanent/static"

静的インデックスは永続的ですが、永続的インデックスは必ずしもそうではありませんstatic。多分私は間違った質問をしています。RavenDb サーバーがクエリの呼び出しごとに新しい動的インデックスを作成する必要がないことを確認したいだけですが、実際には 1 分間に 100 回呼び出すことはありません。

RavenDB は、クエリを分析し、その場で一時的なインデックスを作成できます。これは、破棄される前にしばらくの間保持されます。

Ravendb サーバー構成オプションから私が理解したこと:

1 分間に 100 回 (デフォルト値) 使用すると、インデックスは永続的に昇格します。また、動的なままで 20 分間使用されていない場合は削除されます (デフォルト)。しかし、使用されるクエリがある場合は、 TempIndexPromotionMinimumQueryCount / 2 per TempIndexPromotionThresholdがわかりません。だから多分私の質問は今です:

常に使用されますが、動的インデックスと永続インデックスの間に大きな違いはありますか?

4

2 に答える 2

1

このステートメントが意味することは、動的/一時インデックスがアプリケーションで頻繁に使用されている場合は、それを静的/永続インデックスに変換する方がよいということです。

于 2012-12-14T15:33:58.143 に答える
1

動的インデックス (常に使用されるかどうかに関係なく):

  1. 既存の動的/静的インデックスを使用してクエリに回答できないため、常にRavenDBによって作成されます
  2. ディスク上ではなく、メモリ内にのみ存在します。
  3. Raven Server を再起動すると表示されなくなります
  4. 使用量がクエリ/経過時間の一定のしきい値を超えない場合は削除されます
  5. 静的インデックスよりもメンテナンス用のリソースの優先度が低い

静的インデックスとは対照的です。静的インデックス:

  1. どちらか
    • 手動/自動で昇格された動的インデックス
    • Raven Studio で手動で定義された静的インデックス
    • アプリケーションによって .NET コードで作成され、RavenDB に登録されます
  2. ディスクに保存されます
  3. Raven Server が再起動するとリロードされます
  4. Raven Server によって自動的に削除されることはありません
  5. メンテナンスの優先度が高くなります。

はい、動的インデックスにも優先順位がありますが、メンテナンスでは静的インデックスが最優先され、次に動的インデックスが優先されます。

また、あなたのアプリケーションは非常に「大きい」(大量/多品種/高スループット?) と述べましたが、開発者のマシンで何らかの開発サイクルがあったに違いないと思います。開発者のテストを通じて、既にインデックスが作成されている場合があります。次のステップは、それらを本番環境に移行する方法です。

これには 3 つの選択肢があります。

  1. RavenDB 自体で解決します (動的 -> 静的)
  2. 環境から環境へ定義をコピーして貼り付けます。(静的)
  3. [推奨] コードでインデックスを作成します。(静的)

推奨されるアプローチは、インデックスを作成する対象が事前にわかっている場合、実装するクラスを作成してAbstractIndexCreationTask<T>から登録することです。コードで静的インデックスを作成するためのドキュメントは、RavenDB Web サイトにあります。このようにして、環境全体で一貫した一連のインデックスも作成できます。

于 2014-04-24T13:14:31.313 に答える