Кеширование запросов к БД в своём модуле

Главные вкладки

Аватар пользователя Andruxa Andruxa 11 апреля 2013 в 13:39

Приветствую.

Пишу модуль, хранящий данные в своей таблице, ориентировочно предполагаю 500-1000 записей.
Данные редко обновляются, но планируется их частое чтение, запрос возвращает 5-15 записей за раз.

Соответствено, возникла мысль кешировать результаты запросов, чтобы не насиловать БД.

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

я так понимаю, что в функции, возвращающей результат запроса, надо заюзать какой-нибудь &drupal_static(__FUNCTION__);

отсыпьте плз. ссылок на маны для их вдумчивого раскуривания.

Комментарии

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 11 апреля 2013 в 13:54

drupal_static и вообще статическое кеширование тебе нужно в случае если одни и теже данные из модуля будут нужны n-раз во время загрузки страницы.
А так, имхо, не те объёмы чтобы париться

Аватар пользователя Andruxa Andruxa 11 апреля 2013 в 14:01

"RxB" wrote:
drupal_static и вообще статическое кеширование тебе нужно в случае если одни и теже данные из модуля будут нужны n-раз во время загрузки страницы

да, скорее всего именно так и получится - в таблице хранятся зависимости между id термина таксономии (раздел каталога) и филдами нод, находящихся в этом разделе каталога, по ним потом будут строиться раскрытые фильры/фасеты и прочая светотень, располагающаяся на странице термина (раздела каталога)

имхо, как раз тот случай, когда надо кешировать

Аватар пользователя Chyvakoff Chyvakoff 11 апреля 2013 в 14:18

Если хранить кэш в БД - то всё равно придётся делать запрос в базу. Так что либо тянуть 1 строку кэша,либо 5-15 строк из твоей таблицы. Шило на мыло.
Или не в БД тогда хранить.

Кэшируй уж тогда сформированные фасеты,или что там у тебя.

Преждевременная оптимизация - корень всех бед.

Аватар пользователя Andruxa Andruxa 11 апреля 2013 в 18:44

"Chyvakoff" wrote:
Если хранить кэш в БД - то всё равно придётся делать запрос в базу.

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

drupal_static(), насколько я понял, не пишет в БД, а хранит результат в статических переменных, т.е. в памяти

поправьте, если неправ

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 11 апреля 2013 в 19:43

"Andruxa" wrote:
drupal_static(), насколько я понял, не пишет в БД, а хранит результат в статических переменных, т.е. в памяти

так и есть, работает в пределах одного запроса. Как и во многих случаях, за громким названием функции апи стоят банальные пхп фичи

Аватар пользователя sg85 sg85 11 апреля 2013 в 19:50

Решение этой проблемы давно реализовано на уровне СУБД, т.е. результаты последних запросов и без того кешируются.

Аватар пользователя Andruxa Andruxa 11 апреля 2013 в 20:07

"sg85" wrote:
Решение этой проблемы давно реализовано на уровне СУБД

да, есть такое

в чем же тогда цимес от использования статического кеширования?

Аватар пользователя sg85 sg85 12 апреля 2013 в 2:43

"Andruxa" wrote:
в чем же тогда цимес от использования статического кеширования?

в Вашем случае, как раз в том, что бы не делать этих запросов вообще(вернее только 1 запрос на страницу), хоть они и к кешу БД, но тем не менее это запросы, однако
"RxB" wrote:
А так, имхо, не те объёмы чтобы париться