0

各レコードにタイムスタンプがある 100,000 を超えるレコードを含むデータセットがあります。

このデータセットは、それぞれが一連の子ノードからデータを収集するいくつかの「コントローラー」ノードから集約されています。各コントローラーはこれらのレコードを定期的に収集し (たとえば、5 分ごとまたは 10 分ごとに 1 回)、レコードにタイムスタンプを適用するの はコントローラーです。


例えば:

コントローラ 1 には、その時点でタイムスタンプが付けられた 20 のレコード、その時点でタイムスタンプが付けられたt23 のレコード、その時点t + 5 minutesで 33 のレコードがあるとしt + 10 minutesます。

コントローラ 2 には、 time にタイムスタンプが付けられた 30 のレコード、 time にタイムスタンプが付けられた(t + 2 minutes) + 10 minutes32 のレコード、 time(t + 2 minutes) + 20 minutesにタイムスタンプが付けられた 41 のレコードなどがあり(t + 2 minutes) + 30 minutesます。


ここで、すべてのタイムスタンプのセットと、各タイムスタンプに表示されたレコード数のカウントだけが情報であると仮定します。つまりi)、どのコントローラーによってどのレコード セットが作成されたか、ii)各コントローラーの収集間隔、またはコントローラーii)の総数がわからないということです。すべてのタイムスタンプのセットを個々のサブセットに分解して、特定の各サブセットの連続する (順序付けられた) 要素間の差異が 0 に非常に近くなるようなアルゴリズムはありますか? あるサブセットiから別のサブセットに要素を追加すると、jこれが増加します。分散?このデータセットでは、CPU のタイミングやネットワークの遅延などにより、1 つのコントローラーの「周期性」が +/- 数秒変動する可能性があることに注意してください。

ここでの最終的な目的は、a)コントローラーの数b)と各コントローラーのサンプリング間隔を確立することです。これまでのところ、周期関数の観点から問題について考えてきたので、おそらくその領域から有用な分解方法がいくつかあるでしょう。

もう 1 つのポイントは、各レコードがどのコントローラーからのものであるかを知る必要はなく、各コントローラーのサンプリング間隔を知る必要があるということです。たとえば、2 つのコントローラが両方とも timeuにサンプリングを開始し、一方が 5 分間隔でサンプリングされ、もう一方が 50 分間隔でサンプリングされた場合、5 は因数であるため、50 分マークで 2 つを分離することは困難です。これらの時折のオーバーラップにもかかわらず、各コントローラーの間隔を計算するのに十分な情報を収集できる限り、これは問題ではありません。

4

1 に答える 1

1

基本的なアプローチの 1 つは、データセットの FFT 分解 (または、気の利いた場合はピリオドグラム) を実行し、結果のスペクトルでピークを探すことです。これにより、コントローラーの期間の大まかな概算が得られ、それらの数の見積もりが得られる場合もあります (また、ピークの高さを調べることで、ログに記録されたレコードの数を知ることができます)。

于 2013-02-14T04:09:14.643 に答える