Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » orm оптимизация при повторном выборе моделей с определенным id [RSS Feed]

#1 Март 9, 2009 11:35:16

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

orm оптимизация при повторном выборе моделей с определенным id

Вообщем есть у меня модель, для нее с помощью пермалинка генерю ЧПУ, там такая ситуация
что для генерации полного ЧПУ нужно доставать связанные с ней модели, я заметил что джанго
делает это отдельным запросом. Но ситуация такая что эти модели (один и тот же id) уже были подняты из базы в рамках
запроса и поидее их можно было бы не доставать заново а взять из кэша..однако я такого в орм не наблюдаю,

более конкретно был выполнен - model.objects.all();
далее в пермалинке поднимались связанные объекты - model2.model.title - это приводит к новому запросу
однако эти модели есть уже в памяти.

как вариант я могу написать в замену пермалинка свой тег например и подставить туда вручную все нужные параметры (чтобы ОРМ не дергал базу лишний раз) но не хочется отказываться от красивого пермалинка и заморачиватся с передачей лтшних параметров.

кешировать с денормализацей тоже для такого случая как то не хочется..тк все может быть сделано автоматически.

Вообще странно что орм не оптимизирует такой вроде простой случай..
вопрос: как нибудь можно его научить искать в кеше модели которые берутся по определенному id несколько раз в рамках запроса а не лазить в базу каждый раз?

возможно есть какие то другие решения?



Отредактировано (Март 9, 2009 11:43:28)

Офлайн

#2 Март 9, 2009 15:23:21

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

orm оптимизация при повторном выборе моделей с определенным id

Evg
более конкретно был выполнен - model.objects.all();
Тут и ошибка. Читайте документацию http://docs.djangoproject.com/en/dev/ref/models/querysets/#id4
Evg
Вообще странно что орм не оптимизирует такой вроде простой случай..
Потому что это не всем и всегда нужно. Потом он не настолько простой, как кажется на первый взгляд.
Evg
вопрос: как нибудь можно его научить искать в кеше модели которые берутся по определенному id несколько раз в рамках запроса а не лазить в базу каждый раз?
Identity map пока ещё нет.



Офлайн

#3 Март 9, 2009 15:54:06

Evg
От:
Зарегистрирован: 2008-12-25
Сообщения: 346
Репутация: +  -1  -
Профиль   Отправить e-mail  

orm оптимизация при повторном выборе моделей с определенным id

да, замена на SubCategory.objects.select_related().all(); прилично снизила количество запросов.

Daevaorn
Потом он не настолько простой, как кажется на первый взгляд.
а в чем может быть сложность? просто же вроде достаточно модель по ключам сохранить и смотреть при новых доступах..



Офлайн

#4 Март 9, 2009 16:54:10

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

orm оптимизация при повторном выборе моделей с определенным id

Evg
а в чем может быть сложность? просто же вроде достаточно модель по ключам сохранить и смотреть при новых доступах..
А понимаете какое дело, ведь это по сути кеш, со всеми вытекающими последствиями: инвалидацией и прочими приятными радостями. И уж тем боле очень сложно сделать это всё прозрачно для клиентского кода ORM. Кстати, сторонние реализации подобных концепций для джанги есть, но ни одна пока не доказала свою профпригодность в бою. Так что алгоритмическая оптимизация рулит!:-)



Офлайн

#5 Март 9, 2009 17:18:25

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

orm оптимизация при повторном выборе моделей с определенным id

В Алхимиии IdentityMap + UnitOfWork - самая нетривиальная с моей точки зрения часть фреймворка. Это вам не язык запросов написать! :)



Офлайн

  • Начало
  • » Django
  • » orm оптимизация при повторном выборе моделей с определенным id[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version