- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Скажу честно, нет особого желания проверять самостоятельно, но все же основная причина этой темы - отсутствие времени.
Вообщем исходные данные:
2 типа логирования - ошибки(плюс время генерации страницы и прочее), которые я отлавливаю сам(я их назвал ПХП), и логирование мускульных запросов(таймстамп, время выполнения запроса, запрос). Для емких запросов(дофига инсертов) я сделал возможность самостоятельно указывать данные по запросу(в какие поля вставляем, скока записей добавлено)
Так вот, при каждом просмотре любой страницы сайта происходит логирование. Пока сделал на файлах(пишется в файл с названием date('Ymd', time()) .'.txt', типа 20121228.txt). Но возник логичный вопрос - а почему бы не писать в БД?
Как-то месяц назад была чуть-чуть похожая ситуация. И делал тесты. В файле был аналогичный код:
Файл был на локалке. Я его открываю в мозиле любимой и для теста раз 20-30 тыкаю F5:)
В итоге вижу следущую картину:
время1
время1
время2
время2
время1
время3
время3
время1
время2
время15
время100500
То есть, то что в БД называется транзакциями здесь отсутствует(я хз, может можно как-то эмитировать, но не знаю, хотя вряд ли, это ж файлы).
И собственно к нашим баранам.
ENGINE = MyISAM на инсерты очень быстр, и он вполне может справиться с поставленной задачей.
Ожидаемое число просмотров(не уникальный посещений, а именно записей в файл) страницы в сутки около 10000, но с перспективой роста.
Так, вот, кто за файлы, а кто за БД, и почему собственно?
updated: хранить логи планируется за последний месяц. Закончился декабрь, сейвим бэкап таблицы с названием "месяц-год", трункейтим таблицу.
1. Запись в файл очень быстрая, быстрее чем в базу.
2. пишем в log.date("Y-m-d") , очищаем моментом, нужный срез так же. Не надо потом таблицу на крон для очистки и оптимизации ставить . Опять же, в бакап базы не попадает мусор
3. в любой момент делаем LOAD DATA через базу и нужный лог в таблице для анализа.
4. банально экономим процессорное время на не нужные проверки целостности, на обработку локов таблицы и т.п.
5. в отличии от базы, формат лога может быть любой.
Stek, ну зачем, Вы, как ни фига не понимающий в Вебе, лезете здесь со своими советами, а тем более с файловым решением для этого есть monstr? :) :) :)
А по сути, для логирования самое то - в файл.
А если еще и в реальном времени это надо, то из консоли tail -f
Это проблемы монстра, когда в интернете кто то не прав :D
Черт, пункт 6 так сказать :) Действительно очень удобно, когда скрипты пишут в лог (каждый в свой лог) , а ты в реал тайм режиме наблюдаешь что происходит. В случае же с базой придется уже писать свой мелкий скрипт.
Консоль? Не, не слышал:)
Спасибо за советы, есть над чем подумать.
ЗЫ. Монстр теперь будет походу "Фемида веб-девелопмента":)
На мой взгляд, тут всё зависит от степени перспективы роста, и распределения нагрузки в течение суток. Под транзакциями вы очевидно подразумевали conqurency, то есть, возможность двум или более процессам писать в лог одновременно. И в этом, при больших нагрузках, при использовании файлов, может оказаться слабое звено. В отличие от базы данных, в файл два процесса не могут писать одновременно. Соответственно, они выстроятся в очередь, и будут друг друга задерживать, и на определённом этапе часть записей не будет производиться.
При использовании базы данных для логирования ошибок, следует учесть вот какой тонкий момент: недавно я столкнулся, в одном из наиболее распространённых скриптов форумов, велось логирование ошибок в базу данных. При большой загрузке сервера, начинают возникать ошибки, типа "Lost connection...". Скрипт пытался записать в лог об этой ошибке, что естественно вызывало ошибку, которую он вновь пытался записать в лог... В результате, за сутки error_log вырастал до много-сотен-мегабайтных размеров.
Попробуйте сделать элементарный скрипт на запись через fopen('..', 'a'); Там все быстродействие упирается только в скорость файловой системы, а это тысячи записей в секунду.
Stek, не говори хоп, пока не перепрыгнул...
Вы никогда не сталкивались с обрезанными записями в логах?
на данный момент у ТС не есть высоконагруженной системы. Поэтому ФС справится без труда.
В случае больших нагрузок, возможно понадобится какая-либо надстройка, например,в виде APC, и по крону dump хеша в файл
only file
пример:
повисла БД...
писать в файлы, а потом по крону скриптом писать ошибки в БД и чистить файлы.
либо в память и каждую минуту в базу. Это - в случае очень высоких нагрузок.
Ни разу. Зато с лог таблицами в базе по сотне гиг - сколько угодно. Особенно весело когда такая таблица в innodb на нагруженнном проекте, где ее фиг просто так дропнешь.
100к записей за 9.0914931297302 , т.е. 10к записей в секунду. Это на виндах, на бюджетном 7200 диске. В базу думаю будет порядка 500-600 в секунду.
Когда у ТС будет такой траф для логов, то уж не думаю, что для него будет актуален метод логирования.
Stek, Это вы проверяли в монопольном режиме
а теперь
test.php
function do_test() {$test=$_GET['test'];
$fp = fopen('test.log', 'a');
fwrite($fp, "$test \n");
fclose($fp);
}
start.php
Это я на коленке... если есть ашЫпки, можно смело в лицо.