@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
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы