0

私は現在、社内のすべてのワークステーションに展開される Windows サービスの開発に取り組んでいます。このサービスの目的は、さまざまな統計を収集し、それらを中央の場所に記録することです。

最初の反復では、サービスは記録するデータがあるたびに SQL を直接呼び出して記録します。約 120 台のワークステーションでテストしたところ、これは良い考えではなく、拡張できないことがわかりました。

問題のデータを収集するための、データベース サーバーを過負荷にしない代替戦略を誰かが推奨できますか? これは、約 2000 台のマシンに展開されます。

私はC#で作業しています。

ありがとう。

4

2 に答える 2

1

あなたの質問から、あなたはすでに実用的な解決策を持っているようで、それを拡張する方法についてアドバイスが必要なだけです. ここに私の2セントがあります:

  • ワークステーションのサービスで SQL 接続を開いたままにしないでください
  • メモリ内のデータ更新をバッチ処理してみて、一定量のデータが収集された後、または一定の間隔が経過した後にのみデータベースを更新します (接続のチャットが減り、分厚いも​​のになります)。
  • データの重複を避けるために、データベースが適切に正規化されていることを確認してください

個人的には、2000 台のワークステーションに拡張する必要があるミッション クリティカルなものについては、商用製品を使用し、車輪の再発明はしません。

于 2009-05-27T17:02:09.223 に答える
0

質問を締めくくるために答えるだけです。これが私がそれを実装した方法です。

データ収集

  • AC# サービスはワークステーションで実行されます。さまざまな間隔で (システム上の特定のイベントに基づいて事前に決定されていません)、データ収集を開始します。
  • データは、ローカル ワークステーション上のファイルに書き込まれます。
  • 次に、データ ファイルがネットワーク上の場所にコピーされます。

データ解析

  • 「インポーター」プログラムは、スケジュールに従って実行されます。前回の実行以降に作成されたすべてのテキスト ファイルを調べて解析し、S​​QL にインポートします。

このように実装した理由は次のとおりです。

  • 元の質問で言及した SQL サーバーのリソースの問題を回避します。
  • 作成されるファイルは非常に小さく、1 ~ 2 KB です
  • インポーターは、進行中のコピーとの衝突を避けるために、過去に数分間実行されます。
  • インポーターは、処理されたファイルを削除し、「lastscantime」および「currentTime-Xminute」ウィンドウ内にないファイルをスキップします。
于 2009-10-06T20:07:15.557 に答える