0

継続的に着信するメッセージの流れを維持する必要があります。パフォーマンス上の理由から、データベースに送信する前に適切なメッセージのセットができるまで待ちます。私はこれらのメッセージをコレクション C に保持します。メッセージがデータベースに追加されるたびに、JMS から通知を受けます。

データベースに存在するオブジェクトと C にあるオブジェクトの両方に対してクエリを実行したいと思います。

この問題を解決するための一般的な設計パターンはありますか? データベースのコピーをメモリ内のコレクションに保持する必要がありますか? データベースの内容を読み、次に C の内容を読み込もうとして、それらを組み合わせてこの融合に関するクエリを作成しようとすると、別のスレッドが C を空にして入れていないことをどのように確認できますか?データベース?

ありがとう

4

2 に答える 2

1

データのクエリを実行する場合 (おそらく SQL SELECT)、コレクションを DB にフラッシュする必要があります。

少なくともいくつかの選択肢があります。

1) DB アクセスをミューテックスでロックアップする。クエリ、ロック、DB へのコレクションのフラッシュ、クエリ、ロック解除が必要な場合。

2) コレクションを DB にフラッシュするように指示するコレクション/DB を処理するスレッドの入力キューのメッセージを設計し、フラッシュされたときに「FlushComplete」condvar を通知し、別の「Continue」condvar を待機します。メッセージをキューに入れ、FlushComplete を待ち、クエリを送信し、Continue を通知します。

私はおそらく(2)に行きます。

于 2013-03-05T09:08:41.760 に答える
0

AKKAを使ってみましたか?非同期システムとマルチスレッドを使用する場合に、pb を簡単に解決し、優れた設計パターンを提供できる、非常に使いやすいエージェント システムです。

于 2013-03-05T06:25:43.997 に答える