1

しばらく前に、ログ パーサーを作成しました。ログは、数千行から数百万行になる場合があります。解析されたエントリをハッシュ参照の配列に格納します。

出力を保存する方法に関する提案を探しています。これにより、スクリプトが再度実行された場合にすぐに読み込むことができます (これにより、ログを再解析する必要がなくなります)。

最終的な目標は、ユーザーがクエリを作成できるようにする 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
          },
私の目標を達成するためのより効率的な方法はありますか?

ありがとう!

4

3 に答える 3

3

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

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

データについてより具体的に説明しないと、特定の答えを得ることはまずありません。

編集:いくつかのサンプル データを投稿したので、これを 、 、 、 、 、indextimestampおよびtexterrnameerrnounknown1含むCSV ファイルまたはデータベースに書き込むことができます。unknown2unknown3line

于 2012-04-18T14:17:58.140 に答える
1
use Storable;

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

%hash = ();
%hash = %{retrieve('file')};
# print my hash
于 2012-04-18T18:03:51.360 に答える
0

いつでも KiokuDB、Storable などを使用できますが、集計を計画している場合は、リレーショナル データベース (またはクエリをサポートするデータ ストア) を使用することが、長期的には最良のソリューションになる可能性があります。データベース サーバーを実行する必要がない、SQLite などの SQL エンジンを備えた軽量のデータ ストアは、出発点として適しています。

于 2012-04-18T18:57:09.777 に答える