Форум сайта python.su
Вообщем есть у меня модель, для нее с помощью пермалинка генерю ЧПУ, там такая ситуация
что для генерации полного ЧПУ нужно доставать связанные с ней модели, я заметил что джанго
делает это отдельным запросом. Но ситуация такая что эти модели (один и тот же id) уже были подняты из базы в рамках
запроса и поидее их можно было бы не доставать заново а взять из кэша..однако я такого в орм не наблюдаю,
более конкретно был выполнен - model.objects.all();
далее в пермалинке поднимались связанные объекты - model2.model.title - это приводит к новому запросу
однако эти модели есть уже в памяти.
как вариант я могу написать в замену пермалинка свой тег например и подставить туда вручную все нужные параметры (чтобы ОРМ не дергал базу лишний раз) но не хочется отказываться от красивого пермалинка и заморачиватся с передачей лтшних параметров.
кешировать с денормализацей тоже для такого случая как то не хочется..тк все может быть сделано автоматически.
Вообще странно что орм не оптимизирует такой вроде простой случай..
вопрос: как нибудь можно его научить искать в кеше модели которые берутся по определенному id несколько раз в рамках запроса а не лазить в базу каждый раз?
возможно есть какие то другие решения?
Отредактировано (Март 9, 2009 11:43:28)
Офлайн
EvgТут и ошибка. Читайте документацию http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4
более конкретно был выполнен - model.objects.all();
EvgПотому что это не всем и всегда нужно. Потом он не настолько простой, как кажется на первый взгляд.
Вообще странно что орм не оптимизирует такой вроде простой случай..
EvgIdentity map пока ещё нет.
вопрос: как нибудь можно его научить искать в кеше модели которые берутся по определенному id несколько раз в рамках запроса а не лазить в базу каждый раз?
Офлайн
да, замена на SubCategory.objects.select_related().all(); прилично снизила количество запросов.
Daevaornа в чем может быть сложность? просто же вроде достаточно модель по ключам сохранить и смотреть при новых доступах..
Потом он не настолько простой, как кажется на первый взгляд.
Офлайн
EvgА понимаете какое дело, ведь это по сути кеш, со всеми вытекающими последствиями: инвалидацией и прочими приятными радостями. И уж тем боле очень сложно сделать это всё прозрачно для клиентского кода ORM. Кстати, сторонние реализации подобных концепций для джанги есть, но ни одна пока не доказала свою профпригодность в бою. Так что алгоритмическая оптимизация рулит!:-)
а в чем может быть сложность? просто же вроде достаточно модель по ключам сохранить и смотреть при новых доступах..
Офлайн
В Алхимиии IdentityMap + UnitOfWork - самая нетривиальная с моей точки зрения часть фреймворка. Это вам не язык запросов написать! :)
Офлайн