Кеширование блоков и некоторые нюансы.

В одном из проектов с Drupal 5 вылез очень веселый косяк. Модуль для Drupal 5  blockcache при большом количестве страниц начал вызывать сильное замедление работы сайта. А дело оказалось в следующем: те люди кто делал сайт до меня поставили раздельное кеширование каждого блока постранично, причем для всех блоков без разбора. При том что в системе уже порядка 1 миллиона документов, то есть страниц, просматриваемых пользователями за час может быть порядка десятка тысяч. А поскольку блоков на страницах сайта много - скажем порядка 20  - число записей в кеше раздувается в 20 раз по сравнению с числом страниц. 

И мы получаем что в таблице cache_block перманентно вертится больше 500 тысяч записей за полдня работы. Учитывая это и учитывая то что модуль blockcache вместо cache_clear_all() в Drupal 5 делает на удаление SQL запрос с LIKE в условии  то получались жуткие тормоза и взаимоблокировки вокруг этой самой таблички...

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

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

]]>]]>

Комментарии

вмемориз

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Доступны HTML теги: <em> <strong> <blockquote> <p> <br />
  • Строки и параграфы переносятся автоматически.

Подробнее о форматировании

CAPTCHA
Вы не робот?
5 + 1 =
Решите простую задачку и введите результат. Например для 1+3 введите 4