Кэширование NDB при использовании прогнозируемых запросов

Не удалось найти этот конкретный вопрос, заданный ранее. Как NDB App Engine обрабатывает кэширование при использовании проецируемых запросов, а не полных запросов сущностей?

Например, если я сначала сделаю прогнозируемый запрос..

MyModel.query().get(projected=['name'])

... а затем выполните обычный запрос...

MyModel.query().get()

... что я получу? Полная сущность? Если да, была ли ЛЮБАЯ часть первого запроса автоматически кэширована NDB? Или NDB может хорошо различать, поэтому в следующий раз, когда я запускаю спроецированный запрос, он потенциально будет извлечен из кеша?


person Dave    schedule 26.08.2012    source источник


Ответы (2)


Насколько мне известно, результаты запросов кэшируются только в контекстном кеше, но результаты не извлекаются из кеша для запросов.

key.get() будет кэшироваться и извлекаться из кеша, но query.get() не будет извлекаться из кеша.

https://developers.google.com/appengine/docs/python/ndb/cache

Из документов: Запросы не ищут значения в каком-либо кеше. Однако результаты запроса записываются обратно в контекстный кэш, если так указано в политике кэширования (но не в Memcache).

Чтобы ответить на вопрос о том, что вы получите, в обоих запросах выясняется, что результаты будут получены из хранилища данных, а не из кеша.

person Rob Curtis    schedule 26.08.2012

Результаты запроса проекции никогда не кэшируются. Было бы неправильно, если бы функция get by key когда-либо возвращала результат проекции. Так что не беспокойтесь.

person Guido van Rossum    schedule 26.08.2012