2012-04-18 10 views
1

私はログパーサーを作成しました。ログは、数千行から数百万行までのログにすることができます。私は、解析されたエントリをハッシュ・リファレンスの配列に格納します。Perlの解析ログ/結果の保存/結果の読み込み

私は出力を保存する方法を提案していますので、スクリプトを再実行するとすぐに読み込むことができます。これにより、ログを再解析する必要がなくなります。

最終的な目標は、ユーザーがクエリを作成できるようにするWebインターフェイスを用意することです(基本的に、データベース内に存在するような解析された出力を処理する)。

私は既に、Data :: Dumperの出力をファイルに書き込むことを検討しました。

Data :: Dumperで印刷された配列の例を次に示します。

 
$VAR = { 'weekday' => 'Sun', 'index' => 26417, 'timestamp' => '1316326961', 'text' => 'sys1 NSP Test.cpp 1000 This is a example error message. ', 'errname' => 'EM_TEST', 'time' => { 'array' => [ 2011, 9, 18, '06', 22, 41 ], 'stamp' => '20110918062241', 'whole' => '06:22:41', 'hour' => '06', 'sec' => 41, 'min' => 22 }, 'month' => 'Sep', 'errno' => '2261703', 'dayofmonth' => 18, 'unknown2' => '1', 'unknown3' => '1', 'year' => 2011, 'unknown1' => '0', 'line' => 219154 }, 
私の目標を達成するための効率的な方法はありますか?

ありがとうございます!

+0

[Storable](http://search.cpan.org/perldoc?Storable)モジュールはどうですか? – TLP

+2

そのデータには冗長性の**ロット**があります。 'timestamp'値を格納すると、' whole'、 'hour'、' sec'、 'min'、' month'、 'dayofmonth'、' year'などを投げ捨てることができます。 –

答えて

3

出力がオブジェクトの場合(またはオブジェクトにする場合)は、KiokuDB(選択したデータベースのバックエンドとともに)を使用できます。そうでない場合はStorableを使用できます。もちろん、データ構造が本質的にCSVファイルを模倣している場合は、ファイルに出力を書き込むことができます。または、ファイルに格納できるJSONオブジェクトにデータを出力することもできます。あるいは、仲買人を捨てて単にデータベースを使うこともできます。

あなたのデータ構造は「ハッシュの配列」(おそらくあなたがハッシュリファレンスの配列を意味する)であると述べました。各ハッシュリファレンスのキーが同じ場合は、これをCSVに保存することができます。

あなたのデータについて詳しく説明しなくても、特定の回答を得ることはまずありません。

編集:今、あなたはいくつかのサンプルデータを掲載しましたことを、あなたは単に、CSVファイルまたはindextimestamptexterrnameerrnounknown1unknown2unknown3の値を使用してデータベースにこれを書くことができますおよびline。あなたはいつもにStorableや私たちが持っている、にKiokuDBを使用することができますが、リレーショナルデータベース(またはクエリをサポートしているいくつかのデータストア)を使用して、集計を行うことを計画している場合が長くにおける最善の解決策かもしれ

+0

あなたの提案をありがとう。コメントにはスペースが限られているので、私は詳細を含むように説明を更新しました。 – trialUnplugged

+0

@ trialUnplugged - 裂け目を切断し、重要なデータをCSVファイルまたはデータベースに格納することができます。上記の編集を参照してください。 –

+1

提案していただきありがとうございます – trialUnplugged

1
use Storable; 

# fill my hash 
store \%hash, 'file'; 

%hash =(); 
%hash = %{retrieve('file')}; 
# print my hash 
0

走るデータベースサーバの実行を必要としないSQLiteのようなSQLエンジンを備えた軽量のデータストアは、良い出発点になります。

関連する問題