2

私は現在、RavenDB を使用して、受信イベントをシステムに集約したビューを提供する単純なダッシュボード アプリケーションの概念実証を行っています。たとえば、ユーザーが時間単位 (1 日)、日単位、月単位、または年単位で表示できるとします。

インポートしてインデックスを作成する既存のイベントが 300 万ありますが、これを実行するための最良の/最もパフォーマンスの高い方法を探しています。

この質問は、データとインデックスが生成された後のアプリケーションのパフォーマンスに関するものではないことに注意してください。その部分は非常に優れています。

ので、私は持っています:

  • イベントを表す単一のクラスで、何がいつ発生したかを示すフィールド (DateTime + 3 つの文字列フィールド) があります。
  • イベントの日付とイベントの種類に基づいて、時間、日、月、年のインデックスをマップ/削減します。
  • アプリは、時間ごと、日ごと、月ごと、および年ごとの値のインデックスを照会します
  • 歴史的には、少なくとも時間ごとの集計が必要でした (個々のイベントではありません)。

インデックスが存在しない場合は問題なくデータをインポートできますが、インデックスが存在する場合は、約 45 分間のインデックス処理後に一貫して OutOfMemoryExceptions が発生します。

インデックス作成プロセスを微調整できますか?また、適切な値は何でしょうか?

あるいは、別の方法から問題にアプローチすることを提案していただければ幸いです。

4

1 に答える 1

1

インポート プロセスをバッチに分割し (たとえば、一度に 1 か月分のすべてのデータ)、raven に存在するインデックスを使用してインポートし、古いインデックスがなくなるまで待機すると、最も安定した結果が得られることがわかりました。

GetStatistics().StaleIndexes を Thread.Sleep と組み合わせて使用​​して、バッチ間でプロセスを待機させました。セッション バッチ サイズは、セッションあたり 1024 ドキュメントのままでした。

于 2012-09-22T04:47:43.813 に答える