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

  Рет қаралды 12,047

MoscowPython

MoscowPython

Күн бұрын

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

Пікірлер: 24
@Shmidtelson
@Shmidtelson 8 жыл бұрын
Очень познавательно. Побольше бы таких докладов =) Да хрен с этим кофебрейком. Как будто каждый день такую инфу дают.
@fannigurt
@fannigurt 7 жыл бұрын
Вы когда организовываете конференции, вы не про кофе думайте, а про контент. Если бы просмотрели презентацию заранее и подготовились по таймингу, то поняли бы, что она часовая.
@alexeyluzin4485
@alexeyluzin4485 3 жыл бұрын
огонь
@funkindy
@funkindy 5 жыл бұрын
Доклад супер. Но удивило несколько, что скорость БД выше скорости питона, по части манипуляции с данными. Разные сложные решейпы и агрегации я делаю в pandas, загружая queryset в датафрейм, и не совсем понятно как in-memory обработка может быть медленней. Но я далеко не гуру.
@TyVik
@TyVik 5 жыл бұрын
Фишка в том, что pandas, numpy и пр. - расширения на C, которые работают напрямую с памятью, не создавая промежуточных python объектов. Так что скорость должна быть сравнима с БД. А вот если будете строки, которые обычные str сортировать или int, то тогда всё будет очень плохо.
@funkindy
@funkindy 4 жыл бұрын
@@TyVik с этим согласен
@NMelis
@NMelis 5 жыл бұрын
и что юзать тогда вместо 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')
@torroot4142
@torroot4142 7 жыл бұрын
офигенный доклад спасибо
@peas8556
@peas8556 2 жыл бұрын
Зздззз
@PythonDevelopment
@PythonDevelopment 2 жыл бұрын
Жаль что не продолжили. Такой суперский докладчик и его так слили в конце! Печально, ребята!
@SamoilenkoLev
@SamoilenkoLev 7 жыл бұрын
Спасибо, очень круто. Не понял, правда, почему prefetch_related так плох. Если дополнительный запрос генерит не так много данных, мне кажется, проще его использовать чем raw SQL
@МиколаБоровенський
@МиколаБоровенський 5 жыл бұрын
Спасибо за доклад. Очень толково!
@Igor-if7sx
@Igor-if7sx 3 жыл бұрын
Годнота! Спасибо Олег
@vmgrussia
@vmgrussia 7 жыл бұрын
докладчик молодец )) хотя я хз что такое ORM ))
@hansolo5665
@hansolo5665 4 жыл бұрын
хранить деньги в decimal field ? он серьезно ?
@Furkas91
@Furkas91 3 жыл бұрын
почему нет?
@ЮрийКлименко-к3щ
@ЮрийКлименко-к3щ 2 жыл бұрын
@@Furkas91 в долларах надо хранить!
@delir0
@delir0 7 жыл бұрын
Спасибо за доклад, он хорош. Хотя, есть пара ошибок: 1) М2М связь Django создаёт уникальный составной индекс, в докладе утверждается иное; 2) Аргумент поля для создания модели называется db_index, а не index_db; 3) Докладчик рекомендует к использованию iterator, однако для psycopg2, драйвера, который мы все используем для постгреса, iterator не имеет смысла, поскольку сам драйвер кэширует результат.
@Bahusss
@Bahusss 7 жыл бұрын
Спасибо за замечания. Однако, итератор работает не на уровне драйвера, а на уровне 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
Начинаем Django приложение правильно
37:02
From Small To Giant Pop Corn #katebrush #funny #shorts
00:17
Kate Brush
Рет қаралды 70 МЛН
Worst flight ever
00:55
Adam W
Рет қаралды 27 МЛН
Почему вам нужно изучать программирование
19:09
Сергей Дмитриевский. Программирование
Рет қаралды 1,6 М.
50 оттенков celery / Олег Чуркин (TechOps)
49:02
Python Channel
Рет қаралды 25 М.
Докеризация приложений на Python
57:50
MoscowPython
Рет қаралды 10 М.
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
30:52
Исправьте СРОЧНО эти 12 ошибок в ваших Python проектах
23:41
КАК УСТРОЕН TCP/IP?
31:32
Alek OS
Рет қаралды 124 М.