1 / 35

Когда начинает трещать по швам Django ORM?

Когда начинает трещать по швам Django ORM?. Александр Миленко, июнь 2013, Мск e-mail: alvein.flea@gmail.com skype: alexander.milenko. СРАЗУ!. ide я! – что за диковинка из глубинки?. ide я! – что за диковинка из глубинки?. ide я! – что за диковинка из глубинки?.

Télécharger la présentation

Когда начинает трещать по швам Django ORM?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Когда начинает трещать по швам Django ORM? Александр Миленко, июнь 2013, Мск e-mail: alvein.flea@gmail.com skype: alexander.milenko

  2. СРАЗУ!

  3. ideя! – что за диковинка из глубинки?

  4. ideя! – что за диковинка из глубинки?

  5. 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 минут

  6. ideя! – что за диковинка из глубинки? • 160 скриптов взаимодействия • Обновление данных номенклатур по всем сайтам (140к позиций) менее чем за 80 секунд • Построенный рабочий процесс: от работы контент-менеджеров (в том числе с подсчетом ЗП) до работы всех сопутствующих структур: call-центр, закуп, логистика, служба качества и т.д. • Порядка 50 различных отчетов и собственные анализы поведений покупателей.

  7. Выучить к школе: http://bit.ly/109nXYX

  8. 3 года ошибок и побед.1 класс. Оптимизация логики • Первая рекламная акция – с 300 посетителей в день до 4000. Мы открываемся через раз! • Фильтр в фильтре • Много лишнего в запросе http://pastebin.com/bfyH6MZm

  9. 3 года ошибок и побед.1 класс. Оптимизация логики. Правим • Предварительная подготовка данных • .values() и .values_list() наши друзья • Выкидываем лишнее из запроса http://pastebin.com/bfyH6MZm

  10. 3 года ошибок и побед.1 класс. Оптимизация логики. Итог Мы начали открываться каждый раз, но все равно медленно

  11. 3 года ошибок и побед.2 класс. Шаблоны – тихая лошадка • Бестолковая магия – котел бежит за вами, но каши не варит. • Красиво? – Да • Функционально – невсегда • Мы ускоряемся http://pastebin.com/7ghQWmTv

  12. 3 года ошибок и побед.3 класс. Кэширование • Кэшировать все – зло!

  13. 3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло!

  14. 3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло! • Кэшировать часть – зло!

  15. 3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло! • Кэшировать часть – зло! • Что делать??

  16. 3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло! • Кэшировать часть – зло! • Что делать?? • Кэшировать!

  17. 3 года ошибок и побед.3 класс. Кэширование • Время кеширования – всегда меньше часа и всегда под контролем • Актуальные данные – не кешируем, а выносим • Инструменты для сброса всего кеша или его части • Выбор формата данных в кеше • Больше фрагментации– больше актуальности • Гибридные ключи – вай-вай красота http://pastebin.com/tGuWhWuy

  18. 3 года ошибок и побед.3 класс 2 четверть. Вынос данных • Много баз не бывает = MongoDB, Redis, Memcached • Фильтры на сайте – платим производительностью за гибкость • Включаем пыхтелку, начинаем подготавливать больше данных и переносить из MySQL в MongoDB • Надежность != скорость MongoDB

  19. 3 года ошибок и побед.3 класс. Итоги Мы взлетели

  20. 3 года ошибок и побед.4 класс. Мы тормозим

  21. 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)

  22. 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) • Мы опять взлетели :)

  23. 3 года ошибок и побед.5 класс. Берем лопату • Хватит мяться – в области больше одного города. Нам нужна доставка, наценка, СЕО и блекджек… • Исходные данные vs. Правила исходных данных • Идем на жертву производительности и…

  24. 3 года ошибок и побед.5 класс. Берем лопату • Хватит мяться – в области больше одного города. Нам нужна доставка, наценка, СЕО и блекджек… • Исходные данные vs. Правила исходных данных • Идем на жертву производительности и… выигрываем!

  25. 3 года ошибок и побед.6 класс. Анализируй это • Чудеса .values() • DB vs. Python-lines • Celery + CSV = счастье логистам

  26. 3 года ошибок и побед.7 класс. Сравнение 1кк строк с 1кк строк • 10 поставщиков – неделя одного сравнения. • 20 поставщиков – что-то линейка товаров уже обновилась.. • 21 поставщик – терпенье и труд – все перетрут • 22 поставщика - понеслась:

  27. 3 года ошибок и побед.7 класс. Сравнение 1кк строк с 1кк строк • 10 поставщиков – неделя одного сравнения. • 20 поставщиков – что-то линейка товаров уже обновилась.. • 21 поставщик – терпенье и труд – все перетрут • 22 поставщика - понеслась: • Подготовка данных – 15 минут • Поиск и сравнение – 30 минут (Левенштейн за бортом) • Привет конкурентам – вы под колпаком! • ИТОГ: 91 поставщик, 25 минут подготовка, 2 часа сравнения

  28. 3 года ошибок и побед.8 класс. .select_related() и .prefetch_related() • Зло • Забыть • Переписать • …

  29. 3 года ошибок и побед.8 класс. .select_related() и .prefetch_related() • Зло • Забыть • Переписать • … • Модели с большим количеством полей – основная проблема данной магии http://pastebin.com/prxnrdRR

  30. 3 года ошибок и побед.9 класс. из 1С и в 1С – идеальный рецепт • Избыточность • Подготовка данных • Анализ • Транзакция • Скорость, защита от потерь данных, возможность отката при отказе http://pastebin.com/G0TEdA3R

  31. 3 года ошибок и побед.10 класс. Ужасный порог в 1,5 секунды • Откуда дровишки? • Нужна ли жертва для поднятия производительности? • Цена поднятия производительности до 0,03 секунд на страницу на 3х летнем проекте

  32. 3 года ошибок и побед.11 класс. Выпускной • Раз в неделю – ловим ботов

  33. 3 года ошибок и побед.11 класс. Выпускной • Раз в неделю – ловим ботов • Именных ботов – кормим дезинформацией

  34. 3 года ошибок и побед.11 класс. Выпускной • Раз в неделю – ловим ботов • Именных ботов – кормим дезинформацией • Радуемсястабильным продажам 

  35. Высшая школа Если это не правда – то уж очень хорошо придумано… (с) итальянская поговорка Спасибо! Александр Миленко alvein.flea@gmail.com skype: alexander.milenko +7 919 408 0178

More Related