Оптимизация Django. 4 - Annotate и Aggregate в ORM. Вычисления в базе

Поделиться
HTML-код
  • Опубликовано: 15 сен 2024

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

  • @sergeyly5438
    @sergeyly5438 Год назад +10

    Спасибо за знания которыми так щедро делишься с нами

  • @vitalivarabyeu8394
    @vitalivarabyeu8394 Год назад +3

    Сеньор Помидор! Я не знаю, как выразить свою благодарность за то, что вы делаете!

  • @BELLA_VESTA
    @BELLA_VESTA 3 месяца назад

    Очень легко заходит этот курс после прохождения первых двух! С синей обложкой я помучался. Очень долго его проходил, иногда на то чтобы понять и вникнуть в суть одного видео у меня уходило 3-4 дня. Может потому что мне 49 годиков?)))Но я не двигался дальше пока на 100% не усваивал урок. Зато теперь просто кайф)
    p.s. Огромное спасибо тебе Серега за этот канал!!! И Руслану из клуба Дедов программистов за мотивацию!!!

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  3 месяца назад +1

      Спасибо за отзыв! На самом деле очень полезный. Сейчас как раз над новым курсом-интенсивном работаю и очень хотелось бы знать с какой скоростью его проходят.
      Вчера как раз созвонился с Русланом и рассказал ему про этот твой комментарий)

    • @BELLA_VESTA
      @BELLA_VESTA 3 месяца назад

      @@SeniorPomidorDeveloper У меня есть небольшая мебельная фабрика и есть одна идея, которая мне спать не дает)) До того, как наткнулся на его канал у меня и в мыслях не было, что эту идею я сам смогу реализовать на практике!!! Он меня вдохновил!!! В школе на олимпиадах по информатике бывал, но это 30 лет назад было)) И вот сейчас я уверен, что у меня все получится! Еще раз низкий вам поклон!!! И с нетерпением жду новый курс!!!!

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  3 месяца назад

      @BELLA_VESTA вам спасибо что смотрели!

  • @shaxzodnizamov9773
    @shaxzodnizamov9773 Год назад +1

    Все очень доступно объяснил, спасибо! 👍🏻

  • @DmitryChushov
    @DmitryChushov Год назад +2

    Спасибо за труд!

  • @ВиталийКоновалов-г1ц

    Спасибо! Как всегда все супер!

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

    Очень полезные видео и на удивление нигде таокго не найти, спасибо за контент.
    Странно что так мало зрителей как по мне заслуживаешь больше.
    Привет из Украины

  • @clauseclause6640
    @clauseclause6640 Год назад +3

    Вроде идея курса хорошая, но много мелких нюансов которые прям цепляют глаз, типа того что не нужно копировать файлы в контейнер до установки зависимостей, или что можно делать префетч сразу через две таблицы и подтянуться обе не нужно для каждой таблицы отдельный префетч. Ну и главная проблема - используйте black, смотреть больно как вы код форматируете)

    • @clauseclause6640
      @clauseclause6640 Год назад +1

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

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

      для изменения структуры ответа для листа лучше использовать кастомный pagination класс, ну и для отдельных сущностей все это лучше делать через сериализатор, потому что от этого зависит как будет формироваться сваггер

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

      в общем понимаю, что курс скорее всего записан, но если будете делать еще что-то подобное и понадобится взгляд со стороны - обращайтесь - могу поревьюить, высказать свои пожелания =)

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

      Вот это грамотные замечания, но курс все равно хороший

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Год назад +11

      Курс вцелом немного про другое. Если каждое решение «полировать» то видео получались бы раза в два дольше.
      Я тоже сторонник того чтобы все выглядело чистенько и красиво. На работе обычно не жалею времени на такое.
      Но в какой-то момент я понял , что приоритеты должны быть в другом. Любой разработчик понимает и MethodField и CharField , любой понимает и синтаксис prefetch с двумя таблицами или если два по одной. Вложеность запроса будет понятна и через pagination (что конечно более красиво) и через костылек.
      То есть все эти вещи они и читаются легко и по скорости отрабатывают абсолютно также. Разница только в эстетическом восприятии. А если разработчик забудет поставить префетч, забудет подебажить SQL, забудет вынести расчеты в асинхронный воркер, забудет закешировать значение, там где это легко сделать. Вот тут начинаются настоящие проблемы при нагрузке. В этом курсе акцент я делаю на этом, на оптимизации.
      А вообще все ваши замечания принимаю и со всеми согласен.

  • @jamjam3337
    @jamjam3337 6 месяцев назад

    спасибо!

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

    Супер

  • @user-kn5ip9lr6r
    @user-kn5ip9lr6r 10 месяцев назад

    Хочу задать вопрос. Зачем мы взваливаем вычисление "total_amount" на базу данных? Ведь у нас уже есть на руках price для всех обьектов в переменной queryset, и мы этот total_amount можем посчитать в python, не делая доп.запрос в базу данных?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  10 месяцев назад

      Про это я говорю на 23:50
      Ну и также важно понять, что в переменной queryset нет ничего. Она lazy и пока мы к ней не обратились, запросов она не производит. Часто поверх ложится еще и пагинация. А total_amount будет нормально работать по любому кол-ву данных. Хоть 1000 хоть 100.000.
      Но если мы хотим именно выбрать оптимальный способ (к примеру замерить скорость первого и второго варианта) то в зависимости от кол-ва записей быстрее может стать первый или второй. Я предпочитаю такие штуки сразу через aggregate делать, пока данных мало оба варианта будут работать моментально

    • @user-kn5ip9lr6r
      @user-kn5ip9lr6r 10 месяцев назад

      @@SeniorPomidorDeveloper про queryset я понял. А вот про вычисление в базе данных нет. Почему в БД это вычисление идёт быстрее. Разве там не нужно пробежаться по всем price в таблице и сложить их, а затем выдать одно число?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  10 месяцев назад

      @user-kn5ip9lr6r не могу описать точно как это делает база. Но это функция движка базы , которая специально для этих агрегаций и предназначена. Это точно не перебор из select-ов со сложением , она работает быстро и на больших кол-вах данных.

    • @user-kn5ip9lr6r
      @user-kn5ip9lr6r 10 месяцев назад

      @@SeniorPomidorDeveloper спасибо большое. Узнаю много нового

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

    Отличный урок!
    Подскажите, почему мы в функции list берём queryset = self.filter_queryset(self.get_queryset())
    Почему не queryset = self.get_queryset()
    Зачем нужен .filter_queryset?

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Год назад +2

      чтобы когда мы передаем фильтр в API запросе, он отработал. это просто копипаст из основного list(), лучше это не менять, если не уверен что он делает

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

      @@SeniorPomidorDeveloper большие спасибо! Вы лучший! :)

  • @koshakpoc2876
    @koshakpoc2876 Год назад +1

    Просмотров 1,2к а лайков 97 - это неуважение!

    • @SeniorPomidorDeveloper
      @SeniorPomidorDeveloper  Год назад +1

      Да стандартно 7%-10%
      А вообще конечно, ставим лайки! )

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

    👍

  • @noname52rus
    @noname52rus 11 месяцев назад

    спасибо!