Задать вопрос
at0m1x
@at0m1x

Нужно ли делать кеширование запросов и как?

Есть страница на сайте, которая работает по стандартном принципу:
1. Делаются несколько запросов к БД на выборку данных.
2. Результаты выборок передаются в шаблон который рендерится и на выходе получаем HTML.
3. Отдаем HTML пользователю.

При выполнении запросов к БД MySQL на выборку, происходит ли кеширование результатов автоматически на стороне самого MySQL?

Есть ли вообще смысл делать кеширование самому, учитывая то что возможно MySQL делает это и так (если делает конечно)?

Что лучше кешировать самому: результаты запросов (т.е. сериализовать массивы и класть их в Memcached) или весь отрендеренный HTML?
  • Вопрос задан
  • 1562 просмотра
Подписаться 2 Простой 1 комментарий
Решения вопроса 1
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я думаю здесь подмена понятий. Автор пишет "кэширует ли БД запросы", а имеет в виду "может ли в принципе эта страшная и непонятная громадина которая называется базой данных в принципе хоть когда-нибудь рабтотать быстро?"
Все, разумеется, кидаются отвечать на первый вопрос.
А на самом деле надо отвечать на второй. Да, почти всегда БД работает гораздо быстрее чем ты можешь вообразить и ничего кэшировать не нужно. Если вдруг стало работать медленно... впрочем, об этом ниже.

Нужно ли делать кеширование запросов
Вот в такой формулировке, взятой с потолка, "а не закэшировать ли мне запросы к базе данных*" - Нет, не нужно.

и как?
Очень просто.
Три простых шага:
1. Понять, устраивает ли тебя производительность приложения. Если устраивает, то все оставить как есть.
2. Если не устраивает, освоить профайлинг. Если это слово не упоминается в вопросе про производительность или кэширование, то вопрос можно сразу удалять. потому что он заведомо взят с потолка и не имеет смысла. По сути, профайлинг - это замер скорости выполнения отдельных участков кода для поиска узких мест - т.е. таких участков кода, которые тормозят всю программу. Это можно делать и вручную, и с помощью различных готовых инструментов. Только по результатам профайлинга, который показал конкретную причину тормозов, то самое узкое место (его еще называют bottleneck, "бутылочное горлышко"), можно приступать к оптимизации. Не кэшированию!
3. Если профайлинг показал, что проблема в конкретном запросе к БД, приступаем к его оптимизации. Чаще всего достаточно добавить индекс или донастроить сервер.
4. Только если все другие способы не помогли - занимаемся кэшированием. Но перед этим сначала решаем Вторую Важнейшую Проблему Информационных Технологий - инвалидации кэша. Поскольку закэшировать - это ерунда, каждый дурак сможет. Самая главная проблема не в том, как данные положить в кэш, а как и когда их оттуда удалять.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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