不久前我创建了一个日志解析器。日志可以是几千行到几百万行。我将解析后的条目存储在一个哈希引用数组中。
我正在寻找有关如何存储输出的建议,以便在脚本再次运行时可以快速地将其读回(这样就不必重新解析日志)。
最终目标是有一个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
},`
有没有更有效的方法来完成我的目标?
3条答案
按热度按时间t9aqgxwy1#
如果输出是对象(或者如果你想让它变成一个对象),那么你可以用
KiokuDB
(沿着您选择的数据库后端)。如果不是这样,那么您可以使用Storable
。当然,如果您的数据结构基本上模拟CSV文件,那么您可以将输出写入文件,也可以将数据输出到JSON对象中,然后将其存储在文件中,还可以放弃中间人而直接使用数据库。您提到您的数据结构是一个“哈希数组”(可能您指的是哈希引用数组)。如果每个哈希引用的键都相同,那么您可以将其存储在CSV中。
如果不对您的数据进行更具体的说明,您不太可能得到一个具体的答案。
**编辑:**现在您已经发布了一些示例数据,您可以简单地将其写入CSV文件或数据库,其中包含
index
、timestamp
、text
、errname
、errno
、unknown1
、unknown2
、unknown3
和line
的值。oknwwptz2#
nsc4cvqm3#
您可以使用KiokuDB、Storable或我们拥有的其他工具,但如果您计划进行聚合,从长远来看,使用关系数据库(或支持查询的数据存储)可能是最好的解决方案。使用SQLite等不需要运行数据库服务器的SQL引擎的轻量级数据存储可能是一个很好的起点。