On Thu, Dec 06, 2007 at 05:03:34PM +0300, Евгений Васильев wrote:
> Здравствуйте, Igor.
>
> Вы писали 6 декабря 2007 г., 16:17:45:
>
> IS> On Thu, Dec 06, 2007 at 03:27:00PM +0300, Евгений Васильев wrote:
>
> >> >> Замечательно! вот бы еще сделать так, чтобы строки лога имели
> >> >> фиксированную длину, для быстрого его чтения.
> >> >> т.е уровнять параметры $user_agent $refferer $request
> >> >> =)
> >>
> >> IS> Это очень просто. Для этого нужно, чтобы клиенты пользовались только
> >> одной
> >> IS> версией браузера, делали бы одинаковый запрос, и делали бы его с одного
> >> IS> и того же сайта.
> >>
> >> :)
> >>
> >> А всеже, неплохо было бы иметь переменные или просто параметр bin_log
> >> Ну или какойнить патчик чтобы это делал, добивал строки пробелами или
> >> нулями до указанной длины например.
> >> цифры в байтах, строки пробелами добивать, размеры сократятся лога
> >> значительно, и читать проще, не загружая весь лог.
>
> IS> С чего это они сократяться, если все запросы, User-Agent'ы и Referer'ы
> IS> будут добивать до одинаковой длины ? Какой, кстати - 1K, 2K, 16K?
>
> Я образно, скажем чтобы считать траф мне нужно 3 параметра:
> время, ip и $bytes_sent
> В бинарном виде это 10 байт (если не ошибаюсь.) на 1 запись.
>
> >> Мне вот сейчас нужено посчитать траффик с определенного хоста и
> >> сгрупировать по ip. А если мой лог весит 200мб+
> >> Как его читать то? А читать его надо каждые 5 мин.
> >> А бинарный просто, сами же понимаете...
>
> IS> И как это выглядит - не загружая весь лог ?
>
> Проблема в скорости, одно дело распарсить весь лог, другое вытащить
> нужные значения не загружая строки из файла.
Проблема в используемых инструментах.
> Я жаже не представляю, сколько времени парсить лог таким способом
> размером скажем в 2 гига.
>ls -lh home.access_log
-rw-r--r-- 1 nobody wheel 2.5G Dec 6 17:15 home.access_log
>time wc -l home.access_log
8234472 home.access_log
real 2m1.475s
user 0m7.316s
sys 0m3.795s
Как видно, основное время - ожидание чтения с диска.
> >> Очень был бы рад, если в будующих версиях ченить подобное появится.
>
> IS> Бинарные форматы - это зло, растираживанное Майкрософтом.
> IS> Для обработки бинарного формата нужно писать специальную программу,
> заточенную
> IS> под этот формат, тогда как для текстовых достаточно grep/awk/perl/etc.
>
> Работаю с php, на нем как раз читать большие файлы быстро можно только
> в таком виде как описал. А искать конец строки, разбивать строку по
> параметрам это долго и накладно.
> Куда проще перемещаться по длине строке и читать нужный параметр зная
> где он и сколько их.
Пора бы оглянуться и увидеть, что мир состоит не только из php.
Есть ещё такая волшебная вещь, как регулярные выражения.
--
Игорь Сысоев
http://sysoev.ru