Как сделать «просмотрено N раз» фунциональность для статьи на блоге?
У статье есть счётчик просмотров. Мне интересно, как можно его обновлять так, чтобы это было эффективно? Ведь если обновлять его в лоб -- зашел пользовать, я сразу сделал sql запрос "update views_count +=1 where ..." -- будет слишком жирно. И такая точность не нужна.
Тогда как? Куда буферизовать кол-во пользователей, которые пришли, перед тем как сделать запрос "update views_count +=N where ..."?
getnowtoday, хм, давайте посчитаем. Запрос в базу на апдейт таблицы занимает от 0,001 до 0,01 секунды, берем по максимуму, 0,01. Предположим что у вас нагруженный проект с обширным функционалом, много запросов в бд, много посетителей... скажем 5 в секунду. При этом прочие запросы занимают по 0,1 секунды на посетителя (это реально много, тяжелые запросы и множественные объединения таблиц объемом под несколько миллионов записей). Итого - 0,5 секунды будет занято под запросы в бд. С дополнительным запросом это будет еще +0,05 секунды. Пусть еще время на разруливание лок/унлок таблицы +0,05. Итого вместо 0,5 секунды вы получите нагрузку в 0,6 секунды. То есть 40% времени сервер все равно простаивает.
Теперь о посетителях. 5 чел в секунду - это 5*60=300 чел в минуту. 18 000 в час. ~300 000 просмотров в сутки(1/3 миллиона). При таком объеме можно спокойно на деньги от проекта купить себе еще пару серверов.
PS: "буферизация" и прочие методы кеширования не всегда бесплатны(в плане производительности и расширяемости), и в таких задачах обычно не используются.