Здравствуйте. Подскажите, может кто сталкивался с такой проблемой. Есть сайт, со средней нагрузкой, приблизительно 25000-30000 посещений в сутки. Нужно вести статистику количества просмотренных страниц и отображать их пользователю. Сейчас эта функция реализована следующим образом: Перед каждый запросом на открытие страницы идет запрос в базу данных UPDATE который увеличивает счетчик (определенное поле) на +1, потом идет второй запрос SELECT где получаем все нужные данные и показываем их пользователю. Так как тип таблицы MYISAM при каждом запросе UPDATE происходит блокировка базы, эта операция при средней нагрузке довольно сильно грузит систему. Как можно решить эту проблему? Может есть какой-то сервис, который просто показывает счетчик для каждой страницы или может количество просмотренных страниц писать не в базу, а в файл?
В базу, но без блокировок, которые могли бы сказаться на других процессах. Лучше в специально выделенную базу. Добавлено спустя 16 секунд: http://stackoverflow.com/questions/9221232/mysql-php-based- ... statistics
По тем же причинам, по которым вообще редис не заменяет мускул: он не SQL. Добавлено спустя 48 секунд: А в статистике важна гибкость отчетов. Типично сиквельная задача.
А ещё лучше миллион китайцев нанять и дать им по кнопке? Поменять дижок на InnoDB, настроить - потянет 100 млн. update+select в сутки на поток на среднем сервере.
Если отказаться от запросов UPDATE, заменив их на систему из INSERT+DELETE+OPTIMIZE, то можно заметно ускориться в некоторых случаях. Можно еще с момента залогинивания пользователя, до момента разлогинивания хранить счетчик в оперативке. Еще я бы рекомендовал отказаться от VPS/VDS и выделенных серверов с дешевыми SATA дисками. Вместо них лучше хороший хостинг с SAS дисками (не рекламирующий что у него SAS диски), там вполне можно вытягивать 200 тысяч UPDATE в сутки.