Поддерживает ли SQLAlchemy кэширование?
поддерживает ли SQLAlchemy какое-то кэширование, поэтому, если я повторно запускаю один и тот же запрос, он возвращает ответ из кэша вместо запроса базы данных? Этот кэш автоматически очищается при обновлении БД?
или каков наилучший способ реализовать это на установке CherryPy + SQLAlchemy?
5 ответов
у нас есть довольно комплексное решение для кэширования, например в сочетании со встроенными крючками, в 0.6. Это рецепт запроса подкласса, чтобы он знал о Beaker и позволял управлять кэшированием запросов для явных запросов, а также ленивыми загрузчиками с помощью параметров запроса.
Я запускаю его в производство сейчас. Сам пример находится в dist, а документация intro - вhttp://www.sqlalchemy.org/docs/orm/examples.html#beaker-caching .
UPDATE: мензурка теперь заменена на dogpile
кэширование: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching
не ответ на ваш второй вопрос, но из комментариев в этой ссылке указывает, что SQLAlchemy не поддерживает кэширование:http://spyced.blogspot.com/2007/01/why-sqlalchemy-impresses-me.html
Ворон сказал...
Does SQLAlchemy do any kind of internal caching? For example, if you ask for the same data twice (or an obvious subset of the initially requested data) will the database be hit once or twice? I recently wrote a caching database abstraction layer for an application and (while fun) it was a fair bit of work to get it to a minimally functional state. If SQLAlchemy did that I would seriously consider jumping on the bandwagon. I've found things in the docs that imply something like this might be going on, but nothing explicit. 4:36 PM
или использовать кэш уровня приложения через слабые ссылки dicts (weakref.WeakValueDictionary), см. пример здесь:http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject
SQLAlchemy поддерживает два типа кэшей:
-
кэширование результирующего набора таким образом, что многократный запуск одного и того же запроса попадает в кэш вместо базы данных. Он использует
dogpile
который поддерживает множество различных бэкэндов, включаяmemcached
,redis
, и основные плоские файлы.документы здесь: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching
-
кэширование
query
объект, так что интерпретатор Python не должен вручную повторно собирать строку запроса каждый раз. Эти запросы называютсяbaked queries
и кэш называетсяbaked
. В основном он кэширует все действияsqlalchemy
принимает перед ударом по базе данных-он не сокращает вызовы базы данных. Начальные тесты показывают ускорение до 40% вquery
время генерации при компромиссе небольшого увеличения детализации кода.документы здесь: http://docs.sqlalchemy.org/en/latest/orm/extensions/baked.html