Когда начинает трещать по швам Django ORM?
-
Upload
oren-hamilton -
Category
Documents
-
view
96 -
download
0
description
Transcript of Когда начинает трещать по швам Django ORM?
![Page 1: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/1.jpg)
Когда начинает трещать по швам Django ORM?
Александр Миленко, июнь 2013, Мск
e-mail: [email protected] skype: alexander.milenko
![Page 2: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/2.jpg)
СРАЗУ!
![Page 3: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/3.jpg)
ideя! – что за диковинка из глубинки?
![Page 4: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/4.jpg)
ideя! – что за диковинка из глубинки?
![Page 5: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/5.jpg)
ideя! – что за диковинка из глубинки?
• 5 интернет-магазинов в 4 областях• 120 000 просмотров в будни, около 400 000 под НГ
ежедневно• 1 сервер для клиентов (i7-3930K x 12, 64GB DD3)• 1 системный сервер (i7-2600 x 8, 32GB DDR3)• Анализ 90+ поставщиков и конкурентов (более 1кк
номенклатуры) на совпадения, цены и др. радости. (менее 2 часов на всех)
• Актуальность учета остатков по 40 складам с отставанием в 15 минут от 1С
• Определение даты доставки с точностью до 10 минут
![Page 6: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/6.jpg)
ideя! – что за диковинка из глубинки?
• 160 скриптов взаимодействия• Обновление данных номенклатур по всем сайтам (140к
позиций) менее чем за 80 секунд• Построенный рабочий процесс: от работы контент-
менеджеров (в том числе с подсчетом ЗП) до работы всех сопутствующих структур: call-центр, закуп, логистика, служба качества и т.д.
• Порядка 50 различных отчетов и собственные анализы поведений покупателей.
![Page 7: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/7.jpg)
Выучить к школе:
http://bit.ly/109nXYX
![Page 8: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/8.jpg)
3 года ошибок и побед.1 класс. Оптимизация логики
• Первая рекламная акция – с 300 посетителей в день до 4000. Мы открываемся через раз!• Фильтр в фильтре• Много лишнего в запросе
http://pastebin.com/bfyH6MZm
![Page 9: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/9.jpg)
3 года ошибок и побед.1 класс. Оптимизация логики. Правим
• Предварительная подготовка данных• .values() и .values_list() наши друзья• Выкидываем лишнее из запроса
http://pastebin.com/bfyH6MZm
![Page 10: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/10.jpg)
3 года ошибок и побед.1 класс. Оптимизация логики. Итог
Параметр Было Стало
Товаров 1000 штук 1000 штук
Запросов 2002 штук 4 штуки
Время исполнения 9991 мс 393 мс
Мы начали открываться каждый раз, но все равно медленно
![Page 11: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/11.jpg)
3 года ошибок и побед.2 класс. Шаблоны – тихая лошадка
• Бестолковая магия – котел бежит за вами, но каши не варит.• Красиво? – Да• Функционально – не всегда• Мы ускоряемся
http://pastebin.com/7ghQWmTv
![Page 12: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/12.jpg)
3 года ошибок и побед.3 класс. Кэширование
• Кэшировать все – зло!
![Page 13: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/13.jpg)
3 года ошибок и побед.3 класс. Кэширование
• Кэшировать все - зло!• Не кэшировать – зло!
![Page 14: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/14.jpg)
3 года ошибок и побед.3 класс. Кэширование
• Кэшировать все - зло!• Не кэшировать – зло!• Кэшировать часть – зло!
![Page 15: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/15.jpg)
3 года ошибок и побед.3 класс. Кэширование
• Кэшировать все - зло!• Не кэшировать – зло!• Кэшировать часть – зло!• Что делать??
![Page 16: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/16.jpg)
3 года ошибок и побед.3 класс. Кэширование
• Кэшировать все - зло!• Не кэшировать – зло!• Кэшировать часть – зло!• Что делать??• Кэшировать!
![Page 17: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/17.jpg)
3 года ошибок и побед.3 класс. Кэширование
• Время кеширования – всегда меньше часа и всегда под контролем• Актуальные данные – не кешируем, а выносим• Инструменты для сброса всего кеша или его части• Выбор формата данных в кеше• Больше фрагментации – больше актуальности• Гибридные ключи – вай-вай красота
http://pastebin.com/tGuWhWuy
![Page 18: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/18.jpg)
3 года ошибок и побед.3 класс 2 четверть. Вынос данных
• Много баз не бывает = MongoDB, Redis, Memcached• Фильтры на сайте – платим производительностью за
гибкость• Включаем пыхтелку, начинаем подготавливать больше
данных и переносить из MySQL в MongoDB• Надежность != скорость MongoDB
![Page 19: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/19.jpg)
3 года ошибок и побед.3 класс. Итоги
Мы взлетели
![Page 20: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/20.jpg)
3 года ошибок и побед.4 класс.
Мы тормозим
![Page 21: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/21.jpg)
3 года ошибок и побед.4 класс. Грязные трюки
• session.engine – rails• nginx backend node – more than 1 (URL, Server, Bot-s)• later – the best of the best of the best (c)
![Page 22: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/22.jpg)
3 года ошибок и побед.4 класс. Грязные трюки
• session.engine – rails• nginx backend node – more than 1 (URL, Server, Bot-s)• later – the best of the best of the best (c)• Мы опять взлетели :)
![Page 23: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/23.jpg)
3 года ошибок и побед.5 класс. Берем лопату
• Хватит мяться – в области больше одного города. Нам нужна доставка, наценка, СЕО и блекджек…
• Исходные данные vs. Правила исходных данных• Идем на жертву производительности и…
![Page 24: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/24.jpg)
3 года ошибок и побед.5 класс. Берем лопату
• Хватит мяться – в области больше одного города. Нам нужна доставка, наценка, СЕО и блекджек…
• Исходные данные vs. Правила исходных данных• Идем на жертву производительности и… выигрываем!
![Page 25: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/25.jpg)
3 года ошибок и побед.6 класс. Анализируй это
• Чудеса .values()• DB vs. Python-lines• Celery + CSV = счастье логистам
![Page 26: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/26.jpg)
3 года ошибок и побед.7 класс. Сравнение 1кк строк с 1кк
строк• 10 поставщиков – неделя одного сравнения.• 20 поставщиков – что-то линейка товаров уже
обновилась..• 21 поставщик – терпенье и труд – все перетрут• 22 поставщика - понеслась:
![Page 27: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/27.jpg)
3 года ошибок и побед.7 класс. Сравнение 1кк строк с 1кк
строк• 10 поставщиков – неделя одного сравнения.• 20 поставщиков – что-то линейка товаров уже
обновилась..• 21 поставщик – терпенье и труд – все перетрут• 22 поставщика - понеслась:
– Подготовка данных – 15 минут– Поиск и сравнение – 30 минут (Левенштейн за бортом)– Привет конкурентам – вы под колпаком!
• ИТОГ: 91 поставщик, 25 минут подготовка, 2 часа сравнения
![Page 28: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/28.jpg)
3 года ошибок и побед.8 класс. .select_related() и .prefetch_related()
• Зло• Забыть• Переписать• …
![Page 29: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/29.jpg)
3 года ошибок и побед.8 класс. .select_related() и .prefetch_related()
• Зло• Забыть• Переписать• …• Модели с большим количеством полей – основная проблема данной
магии
http://pastebin.com/prxnrdRR
![Page 30: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/30.jpg)
3 года ошибок и побед.9 класс. из 1С и в 1С – идеальный рецепт
• Избыточность• Подготовка данных• Анализ• Транзакция• Скорость, защита от потерь данных, возможность отката при отказе
http://pastebin.com/G0TEdA3R
![Page 31: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/31.jpg)
3 года ошибок и побед.10 класс. Ужасный порог в 1,5
секунды
• Откуда дровишки?• Нужна ли жертва для поднятия производительности?• Цена поднятия производительности до 0,03 секунд на
страницу на 3х летнем проекте
![Page 32: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/32.jpg)
3 года ошибок и побед.11 класс. Выпускной
• Раз в неделю – ловим ботов
![Page 33: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/33.jpg)
3 года ошибок и побед.11 класс. Выпускной
• Раз в неделю – ловим ботов• Именных ботов – кормим дезинформацией
![Page 34: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/34.jpg)
3 года ошибок и побед.11 класс. Выпускной
• Раз в неделю – ловим ботов• Именных ботов – кормим дезинформацией• Радуемся стабильным продажам
![Page 35: Когда начинает трещать по швам Django ORM?](https://reader035.fdocuments.net/reader035/viewer/2022081503/56812a53550346895d8da2f0/html5/thumbnails/35.jpg)
Высшая школа
Если это не правда – то уж очень хорошо придумано… (с) итальянская поговорка
Спасибо!
Александр Миленко[email protected]
skype: alexander.milenko+7 919 408 0178