2016-03-25 6 views
1

私は、現在返されているクエリの情報を使用してユーザーのクエリをプリフェッチするシステムを構築しようと考えています(ユーザーがDBをクエリしてuserIdを検索し、ユーザーが行っていた電話呼び出しの一覧を返します。ActorSystemが持つアクターの数、およびその名前は何ですか?

現在のところ、各クエリーは〜10を取っています(つまり、記録された電話の日付、継続時間、場所などのクエリーをプリフェッチします)。 (コード内で実行する必要がある最適化がいくつかありますが、大きなボトルネックはDBであり、それは私の手の外です)

したがって、私は俳優との先取りをしたいと思います。彼らが未使用になると俳優が自分を殺す方法x時間の間、しかし、私は最初に実行している俳優を見る方法が欲しいです。

Akka.NETでこれを行う方法はありますか?

答えて

2

どのようにモデル化できるかは、特定のプリフェッチアクターのセットを処理する親アクターを持つことです。あなたのプリフェッチをすべて管理する1つのアクター、またはそれぞれがプリフェッチャーの特殊なセットを管理する複数のアクターがあなた次第です。

しかし、重要なのは、定義済みのトップレベルアクターになり、アクティブなプリフェッチャーの数を尋ねるメッセージを送ることができることです。

更新:

あなたは複数のアクターにメッセージを送信するためにActorSelectionとワイルドカードを使用することができます。

ハンドリングタイムアウトについて。私はパッシベーションパターンを使用します。子アクターはReceiveTimeoutメソッドを使用して自身のアクティビティーをモニターし、x時間のアイドル状態を検出するとその親にパッシベーション・メッセージを送信することができます。 親がパッシベーションメッセージを受信すると、子へのメッセージのルーティングが停止され、代わりにバッファリングされます。そして、俳優をやめる。アクターの終了が確認されると、そのアクターの新しいメッセージがあるかどうかをチェックします。アクターを再作成し、そのバッファーからメッセージをバッファーにフラッシュする場合は、そのアクターの新しいメッセージがあるかどうかを確認します。

+0

名前をつけるための実際の方法はありませんか?私はトップレベルの俳優がそれを管理する国家を持つことができたと思います。子供の俳優に最後にアクセスした時もそうです。次に親の俳優がタイムアウトなどを処理します。回答を更新しました –

+1

それはコメントのために多くだったので。 – Danthar

関連する問題