Две техники кэширования PHP

0

Представьте на минуту, что вы являетесь создателем популярной CMS, написанной на PHP. Он используется многими людьми, для многих веб-сайтов. Теперь давайте немного поговорим о методах кеширования. В классе обслуживания есть одна функция (getItemByHandle) для получения определенного элемента из определенной таблицы из базы данных.

Что касается общей производительности, вы бы предпочли

  • написать запрос к базе данных для извлечения этого конкретного элемента и кэшировать его для каждого дескриптора,
  • или вы бы предпочли извлечь все элементы, кэшировать их и затем отфильтровать нужный элемент с помощью цикла foreach в PHP?

Оба метода будут кэшировать его только для текущего запроса. Вывод базы данных хранится только в переменной PHP. Поэтому никаких дальнейших методов кэширования, таких как Key-Value-Store или около того.

Первая техника будет кешировать только выбранные элементы. Каждый getItemByHandle(...) с другим дескриптором вызовет новый удар по базе данных.

Однако второй метод будет попадать в базу данных только один раз (по запросу), но это также означает, что из базы данных больше трафика, а у PHP больше рабочей нагрузки. Таким образом, если в таблице будут тысячи записей, она будет выбирать все для каждого запроса, но не будет попадать в базу данных при последующих getItemByHandle(...) рамках того же запроса.

Я спрашиваю, потому что, возможно, есть и другие аспекты для рассмотрения, которые здесь не описаны.

Теги:
performance
caching

2 ответа

0

Обычно PHP-скрипты начинаются заново с каждым вызовом. Это связано с тем, что HTTP по своей сути "не имеет состояния". Это означает, что кэширование между страницами невозможно.

Есть некоторые кладжи, которые включают переменные "сессии", которые умирают, когда "пользователь" заканчивает свою страницу (страницы).

MySQL предназначен для (обычно) всего необходимого кэширования. Конечно, можно писать ужасные запросы CMS в базу данных, что делает CMS "медленным". Я считаю, что это небрежный код, а не отсутствие кеширования.

Если ваш набор данных достаточно мал для кэширования всего, запросы (без кэширования), вероятно, достаточно быстрые, поэтому у вас будут проблемы с измерением разницы в скорости.

Если набор данных большой, преждевременное кеширование окажется глупым, и ваши попытки потерпят неудачу.

0

Чем меньше запросов к базе данных, тем лучше.

Если вы можете получить весь набор данных, и вы уверены, что ваша память получила размер для него. Так что ваш второй вариант самый лучший.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню