Файл записывает в секунду - PullRequest
3 голосов
/ 04 января 2010

Я хочу регистрировать посещения моего сайта с высокой частотой посещений в файл. Сколько записей в файл журнала я могу выполнить в секунду?

Ответы [ 8 ]

8 голосов
/ 04 января 2010

Если вы не можете использовать Analytics, почему бы вам не использовать существующую систему ведения журналов вашего веб-сервера? Если вы используете настоящий веб-сервер, он почти наверняка является механизмом регистрации, который уже оптимизирован для максимальной пропускной способности.

На ваш вопрос невозможно ответить во всех остальных отношениях. Количество возможных операций записи зависит от оборудования, операционной системы и конкуренции с другими работающими программами.

4 голосов
/ 04 января 2010

Или просто проанализируйте файлы журнала доступа Apache. Например, с AWStats .

4 голосов
/ 04 января 2010

Не делайте этого, используйте Google Analytics .Вы столкнетесь со многими проблемами, пытаясь открыть файлы, написать им, закрыть их и так далее, и так далее.Проблемы могут возникнуть, когда вы перезаписываете данные, которые еще не были зафиксированы и т. Д.

Если вам нужно собственное локальное решение (в частной сети и т. Д.), Вы можете выбрать вариант, например AWStats , который работает от сканирования ваших файлов журнала.

2 голосов
/ 04 января 2010

Запись в файл обходится недорого, пока вы фактически не сбросите данные на диск. Обычно ваша операционная система агрессивно кеширует данные, поэтому вы можете добиться очень хорошей производительности записи, если не попытаетесь fsync() вручную обработать данные (но, конечно, вы можете потерять последние записи журнала в случае сбоя).

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

1 голос
/ 04 января 2010

Если вы используете Apache, я бы порекомендовал использовать утилиту rotatelogs , поставляемую как часть стандартного набора.

Мы используем это, чтобы разрешить ротацию сервера ежедневно выходить из системы без необходимости останавливать и запускать сервер. Нотабене Используйте новую "||" синтаксис при объявлении директивы журнала.

Сайт, с которым я работаю, является одним из самых крупных в Интернете, частота просмотров которого в течение длительных периодов времени достигает пика в миллионах в секунду.

Редактировать: Я забыл сказать, что сайт использует стандартные директивы ведения журнала Apache, и нам вообще не нужно настраивать код ведения журнала Apache.

Редактировать: Кстати, Если вам это действительно не нужно, не регистрируйте байты, которые обслуживаются, поскольку это вызывает всевозможные проблемы около границы полуночи.

1 голос
/ 04 января 2010

Доступ к файлам очень дорогой, особенно при записи. Я бы рекомендовал сохранять их в ОЗУ (используя тот метод кэширования, который вам больше подходит) и периодически записывать результаты на диск.

Вы также можете использовать базу данных для этого. Что-то вроде:

UPDATE stats SET hits = hits + 1

Попробуйте пару различных решений, сравните производительность и внедрите то, что работает достаточно быстро с минимальным использованием ресурсов.

1 голос
/ 04 января 2010

Если ваш жесткий диск может записывать 40 МБ / с, а количество строк в файле журнала составляет ок. Длина 300 байт, я предполагаю, что вы можете записывать 140000 HTTP-запросов в секунду в ваш файл журнала, если вы оставляете его открытым.

В любом случае, вам не следует делать это самостоятельно, поскольку большинство веб-серверов уже пишут в лог-файлы, и они очень хорошо знают, как это сделать, как прокрутить файлы, если достигнут максимальный лимит, и как отформатировать строки журнала. по некоторым известным схемам.

0 голосов
/ 04 января 2010

Пусть Apache сделает это; выполнить анализ на бэк-энде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...