Подтвердить что ты не робот

Поддерживает ли SQLAlchemy кеширование?

Поддерживает ли SQLAlchemy какое-то кэширование, поэтому, если я повторяю один и тот же запрос, он возвращает ответ из кэша вместо запроса к базе данных? Этот кеш автоматически очищается при обновлении базы данных?

Или какой лучший способ реализовать это на установке CherryPy + SQLAlchemy?

4b9b3361

Ответ 1

У нас есть довольно всеобъемлющее решение для кеширования, как пример в сочетании со встроенными крючками, в 0.6. Это рецепт подкласса Query, информирование о Beaker и возможность управления кешированием запросов для явных запросов, а также ленивыми загрузчиками через параметры запроса.

Сейчас я запускаю его в производство. Сам пример находится на расстоянии, а документация по вступлению находится в http://www.sqlalchemy.org/docs/orm/examples.html#beaker-caching.

UPDATE: Beaker теперь заменен кэшированием dogpile: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching

Ответ 2

Не ответ на ваш второй вопрос, но из комментариев в этой ссылке указывает, что 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

Джонатан Эллис сказал...

No; the author of SA [rightly, IMO] considers caching a separate concern.

What you saw in the docs is probably the SA identity map, which makes it so 
if you load an instance in  two different places, they will refer
to the same object. But the database will still be queried twice, so it is
not a cache in the sense you mean.

Ответ 4

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

Ответ 5

Нет, но вы можете выполнять кеширование с помощью memcache.