Некоторые запросы не являются наборами запросов, которые кэшируются с помощью django-cache-machine / django-johnny-cache

Я ищу, чтобы кэшировать некоторые редко обновляемые данные, поступающие из нескольких связанных таблиц в БД (MySQL, чтобы быть конкретным). Я пробовал кэшировать наборы запросов django ORM с помощью вышеупомянутых приложений django, но столкнулся с некоторым странным поведением с ними обоими: некоторые запросы запрашиваются даже тогда, когда они должны поступать из кэша, как и остальные.

Я извлекаю данные в виде набора из 6 запросов, смешивая любой из: filter, select_related, prefetch_related (отношения M2M), прямые и обратные отношения. Просто поиск данных, без обновлений. Это происходит в специальном методе, который для целей оценки я дважды вызываю из TestCase. (Для предотвращения любых потенциальных проблем не было никакого управления транзакциями любого вида в оцениваемом методе)

Я наблюдаю, что 3 из запросов были повторены - один обратный m2m от prefetch_related (в то время как другой обратный m2m был кэширован) и два довольно простых запроса обратного менеджера, которые поддерживали такое поведение даже при изменении на ModelName.objects.all() или фильтр, соответствующий отношению. Эти последние испытания, которые я проводил в поисках некоторого шаблона, были сделаны только на johnny-cache, что предпочтительнее для моего конкретного сценария из-за его политик аннулирования. Я также попытался изменить метод некоторыми общими способами, в основном снимая в темноте, например, удаляя ошибочные запросы (все кэшируется), оставляя только один из нарушающих запросов (все еще не кэшированный), изменяя порядок запросов (без изменений).

Кто-нибудь сталкивался с чем-то подобным или может предложить какое-то объяснение?

0 ответов

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