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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
33
0
28 114
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Эта ссылка mail-archive.com/[email protected]/msg15667.html предполагает / показывает, что последующий запрос не использует запрос, а возвращает экземпляр из карты идентичности, но это работает только в том случае, если вы запрашиваете с использованием первичного ключа.

andho 06.10.2009 20:38

Или используйте кеш уровня приложения с помощью dicts слабых ссылок (weakref.WeakValueDictionary), см. Пример здесь: http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject

Ответ принят как подходящий

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

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

ОБНОВЛЕНИЕ: Beaker теперь заменен кешированием dogpile: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching

SQLAlchemy поддерживает два типа кешей:

  1. Кэширование набора результатов, чтобы многократно выполняемый один и тот же запрос попадал в кеш, а не в базу данных. Он использует dogpile, который поддерживает множество различных серверных программ, включая memcached, redis и базовые плоские файлы.

    Документы здесь: http://docs.sqlalchemy.org/en/latest/orm/examples.html#module-examples.dogpile_caching

  2. Кэширование объекта query, чтобы интерпретатору Python не приходилось каждый раз вручную заново собирать строку запроса. Эти запросы называются baked queries, а кэш - baked. По сути, он кэширует все действия, которые sqlalchemy выполняет ПЕРЕД обращением к базе данных - он не сокращает количество обращений к базе данных. Первоначальные тесты показывают ускорение до 40% времени генерации query за счет небольшого увеличения детализации кода.

    Документы здесь: http://docs.sqlalchemy.org/en/latest/orm/extensions/baked.html

Кэширование набора результатов не использует карту идентификации? Я впервые услышал о собачьей куче в этом контексте. Или это как-то связано с картой идентичности?

Susa 16.04.2018 16:59

Другие вопросы по теме