| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. Последний написан нашим парнем, и тоже на перле |
| Автор: 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, Надо не номер строки запоминать, а смещение в байтах. |