Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Большие файлы. установить указатель


Автор: al0ns0 31.8.2007, 11:13
Мне нужна отпарсить squid access.log, за месяц он разрастается на 100mb.
скрипт стартует кронам каждый день,каждый час. Мне нужна что бы при новом старте, парсинг начинался с последнего.
Это легко делает если в массив записать содержимое файла, но 100mb писать в массив это не годиться=)

Что делать?

Автор: shamber 31.8.2007, 11:56
al0ns0, а если резать файл на части?

Автор: amg 31.8.2007, 12:30
Логичнее воспользоваться logrotate (если рутовые права доступны, конечно)

Автор: Nab 31.8.2007, 13:50
Правильней настроить logrotate у самого сквида. Потом можно воспользоваться уже готовыми решениями, sarg или lightsquid. Последний написан нашим парнем, и тоже на перле smile Но он парсит лог минимум за сутки, каждый час смысла не имеет, хотя с последнего моего общения может что и изменилось.

Автор: Ramirez 31.8.2007, 14:17
логичнее конечно резать файл по дням.

но если всетаки хочется парсить один большой, то я бы наверное делал так:

1. отпарсили. запомнили номер последней ст роки и дату создания файла.
2. при след запуске проверили дату создания файла
    а. если дата создания файла другая - значит начинать парсить с начала
    б. если дата не изменилась, то парсим начиня с запомненной строчки



чтобы "прокручивать" файл к нужному месту, можно посмотреть в сторону http://search.cpan.org/~gbarr/IO-1.2301/IO/Seekable.pm

а можно просто тупо в цикле читать и пропускать строчки, если скорость не критична.

Автор: Sadok 1.9.2007, 09:28
Ramirez, 
Надо не номер строки запоминать, а смещение в байтах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)