100クライアントから30秒ごとにデータを受信し、データをデータベースに格納するC#.netアプリケーションを実行します。データは各クライアントの2つのパラメータ用です。私は時間ごとに各クライアントのために、各パラメータの合計を決定し、その結果に基づいて決定を下す必要があります。決定アルゴリズムは、1時間分のデータをスライディングウィンドウ形式で決定することになります。私の最初の考えは、キーがクライアントIPであり、値が稼働中の合計であるこれらの100のクライアントの辞書を保持することです。しかし、1)私のアプリが1時間または分59の途中で再起動した場合、それらのすべての暖かい稼働合計が失われます。 2)より多くのクライアントがデータを送信し始めると、辞書はより多くのメモリを消費する、3)将来2つのパラメータが100になると、辞書はさらに大きくなる4)実行中の合計値は常に1時間分最近のデータを反映する簡単。受信ストリームから時間の経過とともに値を計算する最も良い方法は何ですか
私は考慮すべきアプローチがありますか?ベストプラクティス?デザインパターン?
これは非常に幅広いですが、ここでは2つのセントがあります:データベースにデータを格納し、クライアントのIPが非常に悪い考え方です.2つの異なるクライアントが同じ外部IPを持つことができますナット、他)。 2の場合、クライアント側でGUIDを生成してクライアントに格納すると、クライアントが接続してそのIDを送信すると、同じマシン上に複数のクライアントを持つことができるように、各クライアントを明白に識別します。 – Gusman
ありがとうございます。 IPは私が同意した悪い考えです。私はGUIDを使用します。データベースの格納に関しては、着信データが到着したときに格納します。意思決定ロジックは、保存前のデータで実行されます。または、意思決定ロジックをデータベースから定期的に取り除くことを意味し、保存しましたか?私はそれを回避しようとしていたので、DBの読み取りと定数書き込みでうまく動作しない可能性があります。 – sOltan
はい、私は格納されたデータの間隔でそれを実行することを意味しました。パフォーマンスについては、クライアント数は100、クライアント数は2番目に多いと思われます。実際のdbは、毎秒何千もの書き込みをサポートするのに十分速く動作するので、トランザクションの量に応じて、十分に速くてもいなくてもよい。 – Gusman