Олег Чуркин (Rambler&Co) - Django: правильно готовим ORM

Поделиться
HTML-код
  • Опубликовано: 26 авг 2024
  • Доклад с Moscow Python Conf 2016 (conf.python.ru)
    Слайды: conf.python.ru...
    В докладе будут затронуты большинство тем, которые необходимо знать современному python-разработчику, чтобы эффективно использовать функционал Django-ORM для построения высоконагруженных web-проектов.
    Поговорим и про классические ошибки при работе с QuerySet’ами и про профилирование и про code style. Выясним как можно сэкономить память и время при выполнении запросов, покажу популярные ошибки при проектировании схемы данных и при использовании миграций, а так же рассмотрим несколько распространенных задач современного веба, которые в Django еще не решены или решены некорректно.
  • НаукаНаука

Комментарии • 24

  • @Shmidtelson
    @Shmidtelson 7 лет назад +29

    Очень познавательно. Побольше бы таких докладов =) Да хрен с этим кофебрейком. Как будто каждый день такую инфу дают.

    • @fannigurt
      @fannigurt 6 лет назад +4

      Вы когда организовываете конференции, вы не про кофе думайте, а про контент. Если бы просмотрели презентацию заранее и подготовились по таймингу, то поняли бы, что она часовая.

  • @PythonDevelopment
    @PythonDevelopment 2 года назад

    Жаль что не продолжили. Такой суперский докладчик и его так слили в конце! Печально, ребята!

  • @torroot4142
    @torroot4142 7 лет назад +4

    офигенный доклад спасибо

  • @user-vj3ug7ub3h
    @user-vj3ug7ub3h 5 лет назад

    Спасибо за доклад. Очень толково!

  • @Igor-if7sx
    @Igor-if7sx 3 года назад

    Годнота! Спасибо Олег

  • @delir0
    @delir0 7 лет назад +3

    Спасибо за доклад, он хорош. Хотя, есть пара ошибок:
    1) М2М связь Django создаёт уникальный составной индекс, в докладе утверждается иное;
    2) Аргумент поля для создания модели называется db_index, а не index_db;
    3) Докладчик рекомендует к использованию iterator, однако для psycopg2, драйвера, который мы все используем для постгреса, iterator не имеет смысла, поскольку сам драйвер кэширует результат.

    • @Bahusss
      @Bahusss 7 лет назад +3

      Спасибо за замечания. Однако, итератор работает не на уровне драйвера, а на уровне ORM и с помощью него можно избежать создания экземпляров модели в памяти. А из бд все данные подтягиваются всегда (если не использовать streaming).

    • @delir0
      @delir0 7 лет назад

      Ух ты, вот это вы меня обрадовали.

    • @TyVik
      @TyVik 5 лет назад

      @@Bahusss Upd. Мне кажется, что Django ORM уже умеет работать через server-side cursor - docs.djangoproject.com/en/2.2/ref/models/querysets/#django.db.models.query.QuerySet.iterator

  • @SamoilenkoLev
    @SamoilenkoLev 7 лет назад

    Спасибо, очень круто.
    Не понял, правда, почему prefetch_related так плох. Если дополнительный запрос генерит не так много данных, мне кажется, проще его использовать чем raw SQL

  • @alexeyluzin4485
    @alexeyluzin4485 3 года назад

    огонь

  • @vmgrussia
    @vmgrussia 7 лет назад +3

    докладчик молодец )) хотя я хз что такое ORM ))

  • @funkindy
    @funkindy 5 лет назад

    Доклад супер. Но удивило несколько, что скорость БД выше скорости питона, по части манипуляции с данными. Разные сложные решейпы и агрегации я делаю в pandas, загружая queryset в датафрейм, и не совсем понятно как in-memory обработка может быть медленней. Но я далеко не гуру.

    • @TyVik
      @TyVik 5 лет назад

      Фишка в том, что pandas, numpy и пр. - расширения на C, которые работают напрямую с памятью, не создавая промежуточных python объектов. Так что скорость должна быть сравнима с БД. А вот если будете строки, которые обычные str сортировать или int, то тогда всё будет очень плохо.

    • @funkindy
      @funkindy 4 года назад

      @@TyVik с этим согласен

  • @NMelis
    @NMelis 5 лет назад +1

    и что юзать тогда вместо order_by("?")

    • @kostyaminkov5659
      @kostyaminkov5659 4 года назад

      создай масив с полями таблицы, в пайтоне импортируй рандом, а в ордер уже закидуй рандомное поле с твоего массива

    • @NMelis
      @NMelis Год назад

      @@kostyaminkov5659 ну такое себе решение

    • @NMelis
      @NMelis Год назад

      from django.db.models.functions import Random
      random_records = YourModel.objects.annotate(random_number=Random()).order_by('random_number')

  • @peas8556
    @peas8556 2 года назад

    Зздззз

  • @hansolo5665
    @hansolo5665 4 года назад

    хранить деньги в decimal field ? он серьезно ?

    • @Furkas91
      @Furkas91 3 года назад

      почему нет?

    • @user-jd4rl7im6d
      @user-jd4rl7im6d 2 года назад

      @@Furkas91 в долларах надо хранить!