ミリ秒単位の解像度でプログラムにメッセージが入ってきます (ミリ秒あたりゼロから数百メッセージまで)。
分析をしてみたいと思います。具体的には、メッセージが着信するたびに更新される、メッセージ数の複数のローリング ウィンドウを維持したいと考えています。たとえば、
- 最後の 1 秒間のメッセージ数
- 過去 1 分間のメッセージ数
- 過去30 分間のメッセージ数を過去 1 時間のメッセージ数で割った値
「最後の 1 秒間に 1,017 件のメッセージ」のような単純なカウントを維持することはできません。メッセージが 1 秒よりも古い時期がわからないため、カウントに含めるべきではないためです...
私は、すべてのメッセージのキューを維持し、1 秒より古い最も新しいメッセージを検索し、インデックスからカウントを推測することを考えました。ただし、これは遅すぎるようで、多くのメモリを消費します。
これらの値をリアルタイムで効率的に取得できるように、プログラムでこれらのカウントを追跡するにはどうすればよいですか?