@dzoid

Как кешировать однотипные MYSQL UPDATE?

Есть база новостей, все селекты кешируются но когда пользователь заходит на страницу новости - делается
UPDATE `news` SET `views`=`views`+1
Эти запросы создают нагрузку на сервер - как их можно кешировать\оптимизировать?
PHP + MYSQL
  • Вопрос задан
  • 305 просмотров
Пригласить эксперта
Ответы на вопрос 2
@mantyr
Пишу много Golang кода с удовольствием:)
Накапливайте в памяти. Вы не указали язык программирования на котором такая задача.

PHP - можно сделать in-memory таблицу в MySQL и делать туда всё теже UPDATE `news` SET `views`=`views`+1, раз в N минут обновлять основную таблицу данными из in-memory (добавлением, а не заменой значения, иначе при рестарте сервера при очередном обновлении потеряются часть показателей)
Golang - хранить количество просмотров в памяти с RWMutex защитой, раз в N минут сохранять все накопленные изменения в MySQL базу

Так же можно использовать Memcache, shared memory, любые другие базы данных, исходя из:
  • языка программирования
  • доступного инструментария


Так же можно вынести views поле в отдельную таблицу или даже на другой MySQL сервер:
  • либо отдельно views
  • либо сделать копию таблицы news

При этом можно добавить очередь (RedisMQ или что-либо другое) для асинхронного увеличения news.views, принцип следующий:
  • пользователь запросил страницу - сделалось SELECT
  • сделали задание в очередь на обновление статистики
  • пользователь получил страницу
  • через какое-то время задание по обновлению количества просмотров выполнилось и пользователь ничего не ждал
Ответ написан
@shagguboy
1) Handler Socket
2) Memcached Plugin
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект