Форум сайта python.su
Здравствуйте.
Собственно, есть вопрос к тем, кто серьёзно на практике сталкивался с кэшированием в pylons.
Пишу небольшой проект навроде конференции. Есть связанные модели темы и сообщения.
Разумеется, хочется оптимизации в виде кэширования.
Проблема состоит в том, что, например, кэш содержащий себе всю тему, необходимо инвалидить, в момент добавления или удаления нового сообщения в этой теме. Так же поступать с кэшем тем. Сами пилонсы, как и алхимия, не предоставляют возможности использовать “из коробки” кэш внутри моделей.
Изучение доки по pylons, beaker, sqlalchemy дало следующие варианты реализации:
1. Низкоуровневое кэширование внутри модели.
Я описал небольшой класс для работы с beaker.cache, достающий параметры и производящий их инвалидацию, руководствуясь этим описанием.
Кстати, этот метод производит наименьшее количество запросов из всех.
2. Использовать beaker-кэширование в алхимии, как описано в примерах
Стоит отметить, что использовать конфиг из pylons внутри модели напрямую, при помощи
from pylons import config
Офлайн
Не скажу за рассматриваемые способы кэширования, не использовал. Но есть еще один - использование app_globals - вроде как дэ-факто считается стандартом кэширования для pylons. По крайней мере, я его пару раз успешно использовал в проектах. Хотя фактически это лишь улучшенная версия 3-го метода.
Ну а что касается 1-го метода, то возможно имеет смысл написать свою реализацию declarative base для sqlalchemy на основе стандартной, где и реализовать фичи, необходимые Вам для кэширования. По крайней мере напишите раз - сможете использовать во всех моделях.
Офлайн