2011-01-14 9 views
1

ここにシナリオがあります。私は複数の理由でサーバと常時接続できるアプリケーションを持っています。 Webサーバーから取得するか、Webサーバーに送信する必要があるオブジェクトには、3つの一般的なセットがあります。クォーツ.Netアーキテクチャの質問

  1. ビジネスデータオブジェクト。これは基本的に、サーバーからクライアントマシンにプルダウンされ、ローカルDBに格納されるデータです。ユーザーがローカルマシンのデータを更新すると、フラグが立てられ、サーバーと同期するために送信する必要があります。データをプルダウンして(必要に応じて)サーバーにデータを送信する必要がある約6つのカスタムクラスがあります。

  2. ファイル。それが述べているように、この同期はファイル用です。ファイルはサーバーにアップロードできます。しかしもっと重要なのは、ファイルをクライアントにダウンロードできることです。サーバーから自動的に送信されるファイルや、必要になるその他のファイルが存在します。

  3. 接続/ログインクエリ。これらの同期は、サーバーからユーザー情報を引き出し、定期的に更新された情報を確認し、アクセス許可を確認します。また、アプリケーションがサーバーに接続されていることを確認し、接続が失われた場合は、適切に処理する必要があります。

私は非常にQuartzの新人です。この3つの異なるシンクロナイゼーションを設定する最良の方法を考えようとしています。いくつかの質問を聞きたいんです。

  1. 複数のスレッドプールが必要な場合は、3つの別々のスケジューラファクトリを作成したいですか?どのように私はconfigでこれを達成するのですか?それとも、工場のインスタンス化の前に明示的にQuartzプロパティを設定するようにコード化する必要がありますか?

  2. ビジネスデータオブジェクトの同期は、時には最も重い負荷になります。ユーザーが最初にログインするか、または追加のアクセス権が割り当てられた場合、サーバーから最大10K個のオブジェクト/レコードをダウンロードする必要があります。これはまれではなく、理想的にはユーザーが接続し、データがすべてダウンロードされ、5〜10分後に目的のためにアプリケーションを使用できるようになります。この同期では、サーバーが新しいデータであるかどうかを常にチェックし、ローカルデータを監視して、新しいデータをサーバーに送信する必要があるかどうかを確認する必要があります。それは、10スレッドのそれ自身のスレッドプールのすべてでこれを処理する工場を持っていることは理にかなっていますか?

最終的に、このプロセス全体を最初に計画し、分割して分割して管理し、正しく行う方法を見つけようとしています。これは概念の証明であり、どんな助けでも大歓迎です。上記のいずれかを批判することを自由に感じてください。

ありがとうございます!

+0

カスタムスレッドプールが必要ですか?早すぎる最適化のようなものです。 –

+0

さて、ビジネスオブジェクトのダウンロードやアップロード中に、ランダムなファイルリクエストをすばやく処理できると考えています。最初はファイル要求ジョブの優先度を高くしたいと考えていましたが、処理時間が長い場合には、よりクリーンで効率的なように、さまざまなセクションに専用のスレッドプールを用意していました。複数のスレッドプールを使用することに問題はありますか、それとも悪い設計ですか? – tc44

答えて

1

Quartz.Spi.IThreadPoolを実装すると、カスタムスレッドプールを接続できます。スケジューラにはただ1つのIThreadPoolしかありませんが、各スレッドに派生させるためにスケジューリングされているジョブに関する情報が実装に必要となりますが、その単一インターフェイスの背後にある複数のスレッドプールを隠すことができます。

デフォルトの実装Quartz.Simpl.SimpleThreadPoolには、固定(構成可能)な数のスレッドがあり、すべて同じ(設定可能な)優先度を持ちます。

そうでなければ、言ったように複数のスケジューラを持つことができます。これは簡単ですが、複数の独立したスケジューラ・ファクトリを持つだけですが、どの状態も共有してはいけません。

+0

フィードバックありがとうございます。私は1つの工場の背後にあるスレッドプールをマスクしようと考えていましたが、それを私の文書に含めることにしましたが、私は複数の工場を推薦して証明すると思います。私は数日後に他のフィードバックがない場合、答えとしてマークします。 – tc44

関連する問題