Кэширование запросов к базе (Codeigniter)

Сразу пример кода:
Первый результат выборки будет кэшироваться, а второй (после отключения кэша) нет.

$this->db->cache_on();

$res = $this->db->get("articles");

$this->db->cache_off();
$res2 = $this->db->get("comments");

А теперь немного теории:

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

Кэшироваться могут только запросы на чтение (SELECT) потому, что только запросы этого типа генерируют результат. Запросы на запись (INSERT, UPDATE и т. д.) не могут кэшироваться системой потому, что не генерируют результат.

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

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

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

Как хранятся кэш-файлы?
CodeIgniter размещает результаты КАЖДОГО запроса в его собственном кэш-файле. Затем наборы кэш-файлов упорядочиваются в поддиректориях соответствующих функциям контроллера. Точнее, поддиректории именуются в соответвии с первыми двумя сегментами URI (имя класс контроллера и имя функции).

Например, допустим имеется контроллер blog с функцией comments, которая содержит три запроса, тогда система кэширования создаст кэш-директорию с именем blog+comments, в которую она запишет три кэш-файла.

Если используются динамические запросы, которые изменяются в зависимости от информации в URI (например, при использовании пагинации — разбиения на страницы), то в этом случае каждый экземпляр запроса сгенерирует свой собственный кэш-файл. Следовательно, в результате может получится, что кэш-файлов будет больше, чем запросов.

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

Запись навигация

Top