2010-01-04 5 views
3

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

+0

Можете ли вы уточнить, какие дополнительные функции вам нужны, которые не предоставляются Google Analytics? – SqlRyan

+0

@ Илья, какой сервер вы используете? Apache? –

+0

ОК, я постараюсь подробно объяснить, что мне нужно. у меня есть рекламная сеть, и я хочу регистрировать показы баннеров в файл, а затем загружать их в mysql один раз в 5 минут. баннеры показывают скорость около 50 в секунду – Ilya

ответ

4

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

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

+0

спасибо, но мне нужна моя собственная система регистрации – Ilya

+2

Богатство информации, предоставляемой Analytics, замечательно. –

+0

Я знаю, но мне нужна другая функциональность – Ilya

4

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

8

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

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

+0

Да, просто проанализируйте журналы сервера. – Rob

+1

Я считаю, что синтаксический анализ сложный и длительный процесс – Ilya

+2

@Ilya: Не так сложно, как пытаться оптимизировать запись файлов. Perl существует прежде всего для того, чтобы делать такие вещи, как синтаксический анализ журнала; есть и другие, более целенаправленные варианты, такие как splunk. Не ходите на орехи, изобретая это колесо. –

1

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

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

1

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

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

UPDATE stats SET hits = hits + 1 

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

+0

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

+0

см. Мои комментарии, я не хочу обновлять базу данных каждый раз – Ilya

1

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

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

Участок, с которым я связан, является одним из крупнейших в Интернете с высокими темпами попадания в миллионы в секунду в течение продолжительных периодов времени.

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

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

+0

как я могу разобрать его? – Ilya

+0

@ Илья, см. Предложение EarthMind о awstats для начальной отправной точки. Мы проводим всевозможные анализы на лог-файлах ежедневно, используя собственный анализатор статистики, который запускается на специализированном наборе машин, например. Sun5240 годов. Анализатор реализован в виде смеси исполняемых файлов, написанных на скриптах C и Perl. Этот процесс анализа занимает не менее десяти часов в день для запуска! –

2

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

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

+0

хорошо, что вы можете мне посоветовать? – Ilya

+0

Безопасность потоков - это именно то, что мне интересно, имея подобную проблему. –

0

Пусть Apache сделает это; выполняйте анализ в фоновом режиме.

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