0

ネットワーク内のさまざまなユーザーのマシンからログ ファイルを解析するとします。任意の日に読み取るマシンの数は、10K から 40K の間の任意の数にすることができます。また、ログ ファイルを解析した後、各解析の結果 (1 行または 2 行) を共通の場所 (データベース テーブルまたはフラット ファイル) に保存したいと考えています。ログ ファイル自体のサイズはそれほど大きくありません。

これを行うための最もエレガントで効率的な方法は何でしょうか?

コンソール アプリケーションを作成し、スレッド プールを使用してタスクを分散しますか? または、c# で利用できるより洗練されたソリューション/クラスはありますか?
または
、Windows サービスの作成に慣れていませんが、サービスを作成し
て複数のマシンに展開することは可能ですか??
または
他のアプローチですか?

4

1 に答える 1

0

これを行うための最も効率的な方法は何ですか?

それは議論の余地があります - 私は投稿の理由の一部をあえて言います. 個人的には、マシンごとにログの読み取りをスレッドプールし、これらの操作の結果を SQL Server バックエンドに格納します。ただし、これは負荷の高い本番環境のアプローチであり、どれだけの労力を費やすかによっては適用できない場合があります。

理想的には、これは専用の Windows サービスとして記述され、Visual Studio の最近のバージョンではこれらのビルド/デバッグがはるかに簡単になりました。別の実行可能なアプローチは、簡単に実行して出力を確認できるコンソール アプリケーションを作成することです。展開するときに、すべての NSSM ツールを使用して、コンソール アプリケーションを Windows サービスとして実行できるようにすることができます。これはおそらく最も手間がかからない方法ですが、少し扱いに​​くい方法です。

1 つのサーバーで 1 つのアプリケーションまたはプログラムを実行するのが最も簡単な方法ですが、これは、ログ ファイルが配置されている各マシンの関連する共有にサーバーがアクセスできることを前提としています。

問題の各マシンにサービスを展開し、それをローカルで実行したい場合 (定義されたスケジュールで 1 つのログ ファイルのセットをチェックする 1 つのスレッドがあるため、マルチスレッドの方法全体をバイパスします)、SQL Server バックエンドを持つことは一連のマシン間でフォルダー共有を構成するよりも、SQL Server アカウントを構成してリモート接続を許可する方が簡単なため、より簡単な方法です (私はドメイン管理者ではないため、これを修正する必要があります)。これの欠点は、アプリケーションを更新する必要がある場合、各マシンで更新するのが面倒なことです。

結局のところ、どのアプローチがあなたの状況に最も適しているのでしょうか? マシンの共有を必要とする単一の展開ですか、それとも単一の SQL Server (または他のデータ ストア) インスタンスを使用する複数の展開ですか?

于 2013-02-19T19:13:47.767 に答える