2012-04-02 5 views
3

私たちのサイトではRavenDBを使用しています。サイトは大量の負荷を処理できるように、すべてのデータをメモリにロードします(それほど多くない)。データをバックグラウンドスレッドにロードします。バックグラウンドスレッドは、新しいデータが存在するかどうかを定期的にDB(RavenDB + sqlserver)でチェックし、そうであればそのデータをメモリにロードします。ravendb長期セッション

私たちはセッションごとにRavenDBに30回のクエリの迷惑なリクエスト制限を回避するために多くのことを試みました。 Ravenにはチェック/ロードループの繰り返しが終わった後でセッションを「リセット」するメカニズムがないため、Structuremapに指示する方法がないので実際にはは新しいセッションを望んでいます私たちの前には同じスレッドが残っています。

最終的には私たちのリポジトリは構造マップがロード/フェッチループでリセットできるRavenSessionProxyを使用するように再構築されました(リセット時に新しいドキュメントセッションを手作業でインスタンス化します)。

これは本当に唯一の方法ですか?レイヴンの中には、「こんにちは、私はあなたと一緒にやっています。あなたが呼んだ次回は新鮮で準備ができています」と言ったり、Structure Map「Hey、SM!私はIDocumentSessionを求めて、新しいものを持ってきて、私はこの古いものに疲れています」

答えて

1

AndreasKnudsen、 RavenDBセッションは比較的短期間であるように設計されています。しばらくの間、それらを保つ必要がある場合は、おそらく何か間違っているでしょう。 RavenDBは速いことを確認するためにすでに多くのことを行っているので、メモリに読み込む必要はありません。

session.Advanced.MaxNumberOfRequestsを設定すると、実行できるリクエスト量が増えることになりますが、メモリにもっと多くの情報を残すことになります。

+0

MaxNumberOfRequestsは問題を延期するだけです。重要なことは、セッションを永遠に持続させ、定期的にリセットすることです。 *すべてではありません*ユースケースは、単一の要求に対して30回のクエリを実行してから終了します。私のバックグラウンドは*永遠に生きることになっています – AndreasKnudsen

4

Ayendeが指摘したように、セッションは短命でなければなりません。あなたのバックグラウンドジョブがセッションに依存するのではなく、IDocumentStoreに依存してから、実行ごとにセッションを作成/廃棄します。 IDocumentStoreは、起動時にコンテナに挿入されるシングルトンにすることができます。

関連する問題