Kianl
@Kianl
Печальный веб-разработчик

Как кэшировать / оптимизировать результат запроса MySQL в Wordpress, не создавая еще большей нагрузки?

Привет.

Есть виджет WP популярных игр за сутки / неделю / месяц / все время. Да к тому же с навигацией на 10 страниц. Он ежедневно генерирует большое количество тяжелых запросов - на каждой загрузке страниц, каждом переключении его вкладок, каждой навигации по этим записям.

Первое, что приходит в голову - кэшировать данные о просмотрах. То есть поставить на крон, и раз в 3-6 часов проходится по всем записям, пересчитывать динамику и запихивать в произвольные поля, по которым уже сортировать записи. Но штука в том, что так запросов станет еще больше, причем в несколько раз. Единственное, что так можно добиться - ускорить работу самого виджета ценой еще большей нагрузки на систему.

Есть ли способ кэширования таким образом, чтобы не создавалась еще большая нагрузка? Либо другие способы оптимизации? Или вообще другие способы решения задачи? Просто удалить не вариант... Как с этим борются другие проекты, у которых похожий функционал?

P.S. Занялся проблемой, потому что на reg.ru, где я сайт этот держу, превысил лимит процессорного времени. А у меня всего-то там 1300 хостов. Пришлось тариф повышать. Что будет, когда станет 5-10к?
  • Вопрос задан
  • 264 просмотра
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Есть ли способ кэширования таким образом, чтобы не создавалась еще большая нагрузка?
Собственно кэширование есть способ сэкономить на медленных запросах. Как я понимаю в вопросах работы алгоритмов вы не в зуб ногой, больше по настройке формочек в вордпрессе... Кэш создается 1 раз, и используется для всех дальнейших запросов как готовый ответ от бд, на определенный срок. Для этого во многих инструментах кэширования есть штатные методы отслеживания интервала хранения конкретного значения.

Условно: выбираете топ 10 количества просмотров игр, кладете в кэш на час, и пока кэш существует в базу не лезете, тащите из кэша. Как только кэш автоматически очищается - делаете еще раз запрос, опять кладете в кэш... Таким образом вместо 500 запросов в час у вас будет 1 запрос, все остальное будет тащиться из кэша, и данные будут не старше часа по актуальности. Можете сократить / увеличить время кеширования и таким образом балансировать в плане нагрузка/актуальность данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
martin74ua
@martin74ua Куратор тега MySQL
Linux administrator
Ээээ... Если просто положить цифры посчитанные кроном в memcache\redis\mysql\file - уже будет проще. Я не пойму, с чего вы решили, что запросов станет больше?
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Оптимизировать запросы.

Но сначала определиться с тем, какой конкретно функционал нагружает процессор. Чтобы не получилось как в прошлый раз.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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