Есть сайт
php + mysql + yii2.
Суть: нужно считать кл-во раз сколько был показан каждый пост из списка.
Есть категорийные страницы, где списком(например по 20) выводяться посты.
В таблице постов есть поле views, которое хранит кол-во сколько раз пост был показан.
Именно показан в списке, а не сколько раз перешли и посмотрели сам пост(один), это важно.
При каждом выводе такого списка нужно обновить поле views++ для каждого из постов в списке.
Например если мы выводим списки по 20 постов мы делаем 20 запросов UPDATE в базу. Каждый раз когда такой список выводится.
Сейчас так у меня это и работает. Но при трафике 6к+ человек в сутки, плюс поисковые боты. Это не самое лучшее решение. Один такой запрос отрабатывает относительно быстро - 0.2 ms. Но сама таблица постов содержит 57к записей, и каждая запись имеет 23 поля. Время ответа сервера падает почти на 1сек
Какое оптимальное решение можно использовать чтобы уменьшить нагрузку на базу, и соответсвенно увеличить время ответа сервера?
Из идей пока только такое приходит в голову:
- Хранить гдето(например в $_SESSION) показы, и раз в 10 минут переносить данные в базу и обнулять информацию в сессии. Но тут тоже, за 10 мин там насобирается очень много постов и они не просто будут харнится а еще и постоянно обновляться информация(сколько раз был показан пост).Так что не уверен что будет профит по скорости\оптимизации.
- Считать уже на фронте, брать айди всех постов и одним ajax запросом обновлять.
- По мере роста трафика переходить на более мощный сервер. Но это дорого по деньгам, т.к. не будет соответсвовать трафик сайта и мощность сервера. Покупать мощный сервер только для одной фишки - дорого. На данный момент текущего сервера хватает с огромным запасом.
UPD: В моем конкретном случае точность не важна. Можно допускать не большую погрешность в подсчете.