2012-04-18 5 views
1

A назад назад я создал парсер журнала. Журналы могут составлять несколько тысяч строк до миллионов строк. Я храню анализируемые записи в массиве хэш-ссылок.Perl Parsing Log/Сохранение результатов/Чтение результатов

Я ищу предложения о том, как сохранить мой вывод, чтобы я мог быстро прочитать его обратно, если сценарий запускается снова (это предотвращает необходимость повторного анализа журнала).

Конечная цель состоит в том, чтобы иметь веб-интерфейс, который позволит пользователям создавать запросы (в основном обрабатывая разобранный вывод, как он существовал в базе данных).

Я уже рассмотрел запись вывода 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

Как насчет модуля [Сохраняемый] (http://search.cpan.org/perldoc?Storable)? – TLP

+2

В этих данных имеется ** много ** избыточности. Если вы сохраните значение «timestamp», вы можете выбросить «все», «час», «сек», «мин», «месяц», «день-месяц», «год» и т. Д. –

ответ

3

Если ваш результат является объектом (или если вы хотите сделать его в объекте), вы можете использовать KiokuDB (вместе с задним концом базы данных по вашему выбору). Если нет, то вы можете использовать Storable. Конечно, если ваша структура данных существенно имитирует CSV-файл, вы можете просто написать вывод в файл. Или вы можете вывести данные в объект JSON, который вы можете сохранить в файле. Или вы можете отказаться от посредника и просто использовать базу данных.

Вы упомянули, что ваша структура данных представляет собой «массив хэшей» (предположительно вы имеете в виду массив хеш-ссылок). Если ключи каждой хеш-ссылки совпадают, вы можете сохранить это в CSV.

Вы вряд ли получите конкретный ответ, не уточнив свои данные.

Edit: Теперь, когда вы опубликовали некоторые образцы данных, вы можете просто написать это в файл CSV или базы данных со значениями для index, timestamp, text, errname, errno, unknown1, unknown2, unknown3, и line.

+0

Спасибо за ваши предложения. Поскольку комментарии имеют ограниченное пространство, я обновил свое описание, чтобы содержать больше информации. – trialUnplugged

+0

@trialUnplugged - вы можете вырезать трещину и хранить основные данные в CSV-файле или базе данных. См. Править выше. –

+1

Спасибо за предложения – trialUnplugged

1
use Storable; 

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

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

Вы всегда можете использовать KiokuDB, Storable или что у нас, но если вы планируете делать агрегацию, с помощью реляционной базы данных (или некоторых хранилищ данных, который поддерживает запросы) может быть лучшим решением в долгосрочном запустить. Хорошей отправной точкой может стать облегченное хранилище данных с SQL-движком, подобным SQLite, которое не требует запуска сервера базы данных.

Смежные вопросы