1

5 分ごとにいくつかのプロセスのスナップショットをキャプチャする区切りログ ファイルがあります。それらについていくつかの統計分析を行い、データのサブセットをグループ化およびチャート化するなどしたいと思います。その一部には、プロセスが開いていた時間をカウントすることが含まれます(つまり、合計分 = x 5 でスナップショットがどのように表示されるか)。Python、R、または任意の言語を使用できます。

課題は、どのフィールドも一意ではない (1 対多および多対多の関係がある) ことです。したがって、唯一の一致は、行全体のすべての要素が同じ場合です。

例が役立つかもしれません。最初のスナップショット ログが次のようになっているとします。

R123,M,5,... <-- line A
R190,Z,4,...
R663,M,8,...

それから 5 分後、次のスナップショットはこれを示しています。

R123,M,5,... <-- line A
R123,P,3,... <-- line B
R955,Z,3,...

明らかに、行 A のプロセスは少なくとも 5 分間実行されています。しかし、B 行の最初のフィールドは同じですが、他のフィールドが一致しないため、同じプロセスではありません。

このデータを簡単に操作できる優れたデータ モデルを見つけようとしています。

1 つのオプションは、単純な頻度カウントです。すべての行全体を Python dict または Perl ハッシュに読み取り、その行をキーとして、次のスナップショットに重複行が表示されたときにカウントに追加するだけです。たとえば、Perl では次のようになります。$count{$_}++ foreach @lines;

しかし、データの完全な行は辞書のキーとして有効でしょうか? また、行 A が 3 つのスナップショットに対して連続して表示され、別の日に再び表示される場合など、連続していないインスタンスについてはどうでしょうか?-時間ベースのクエリが引き続き有効になるように、これらは個別のインスタンスである必要があります。

このデータを処理および保存する方法について何か提案はありますか?

4

1 に答える 1

1

最初の質問 - 確かに、少なくとも Perl では、任意の文字列をハッシュ キーとして使用できます。無制限。

次へ: スナップショットを順番に評価します。スナップショット 1 では、すべてをメモリに読み込み、各項目にカウンター 0 を割り当てます。スナップショット 2 に進みます。スナップショット N では、次のように進みます。新しいものはすべてメモリに保存され、カウント 0 が割り当てられます。すでにメモリにあるものはすべて、増加したカウンタでメモリに保持されます。メモリにはあるが、現在のスナップショットにはもうないものはすべて、出力ファイルにファイルされます。

ログ ファイルのサイズが気になる場合は、Perl のハッシュの代わりに、DBI 経由の SQLite などの SQL データベースを使用してください。

于 2013-06-27T22:48:05.913 に答える