350 likes | 514 Vues
Когда начинает трещать по швам Django ORM?. Александр Миленко, июнь 2013, Мск e-mail: alvein.flea@gmail.com skype: alexander.milenko. СРАЗУ!. ide я! – что за диковинка из глубинки?. ide я! – что за диковинка из глубинки?. ide я! – что за диковинка из глубинки?.
E N D
Когда начинает трещать по швам Django ORM? Александр Миленко, июнь 2013, Мск e-mail: alvein.flea@gmail.com skype: alexander.milenko
ideя! – что за диковинка из глубинки?
ideя! – что за диковинка из глубинки?
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 минут
ideя! – что за диковинка из глубинки? • 160 скриптов взаимодействия • Обновление данных номенклатур по всем сайтам (140к позиций) менее чем за 80 секунд • Построенный рабочий процесс: от работы контент-менеджеров (в том числе с подсчетом ЗП) до работы всех сопутствующих структур: call-центр, закуп, логистика, служба качества и т.д. • Порядка 50 различных отчетов и собственные анализы поведений покупателей.
Выучить к школе: http://bit.ly/109nXYX
3 года ошибок и побед.1 класс. Оптимизация логики • Первая рекламная акция – с 300 посетителей в день до 4000. Мы открываемся через раз! • Фильтр в фильтре • Много лишнего в запросе http://pastebin.com/bfyH6MZm
3 года ошибок и побед.1 класс. Оптимизация логики. Правим • Предварительная подготовка данных • .values() и .values_list() наши друзья • Выкидываем лишнее из запроса http://pastebin.com/bfyH6MZm
3 года ошибок и побед.1 класс. Оптимизация логики. Итог Мы начали открываться каждый раз, но все равно медленно
3 года ошибок и побед.2 класс. Шаблоны – тихая лошадка • Бестолковая магия – котел бежит за вами, но каши не варит. • Красиво? – Да • Функционально – невсегда • Мы ускоряемся http://pastebin.com/7ghQWmTv
3 года ошибок и побед.3 класс. Кэширование • Кэшировать все – зло!
3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло!
3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло! • Кэшировать часть – зло!
3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло! • Кэшировать часть – зло! • Что делать??
3 года ошибок и побед.3 класс. Кэширование • Кэшировать все - зло! • Не кэшировать – зло! • Кэшировать часть – зло! • Что делать?? • Кэшировать!
3 года ошибок и побед.3 класс. Кэширование • Время кеширования – всегда меньше часа и всегда под контролем • Актуальные данные – не кешируем, а выносим • Инструменты для сброса всего кеша или его части • Выбор формата данных в кеше • Больше фрагментации– больше актуальности • Гибридные ключи – вай-вай красота http://pastebin.com/tGuWhWuy
3 года ошибок и побед.3 класс 2 четверть. Вынос данных • Много баз не бывает = MongoDB, Redis, Memcached • Фильтры на сайте – платим производительностью за гибкость • Включаем пыхтелку, начинаем подготавливать больше данных и переносить из MySQL в MongoDB • Надежность != скорость MongoDB
3 года ошибок и побед.3 класс. Итоги Мы взлетели
3 года ошибок и побед.4 класс. Мы тормозим
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)
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) • Мы опять взлетели :)
3 года ошибок и побед.5 класс. Берем лопату • Хватит мяться – в области больше одного города. Нам нужна доставка, наценка, СЕО и блекджек… • Исходные данные vs. Правила исходных данных • Идем на жертву производительности и…
3 года ошибок и побед.5 класс. Берем лопату • Хватит мяться – в области больше одного города. Нам нужна доставка, наценка, СЕО и блекджек… • Исходные данные vs. Правила исходных данных • Идем на жертву производительности и… выигрываем!
3 года ошибок и побед.6 класс. Анализируй это • Чудеса .values() • DB vs. Python-lines • Celery + CSV = счастье логистам
3 года ошибок и побед.7 класс. Сравнение 1кк строк с 1кк строк • 10 поставщиков – неделя одного сравнения. • 20 поставщиков – что-то линейка товаров уже обновилась.. • 21 поставщик – терпенье и труд – все перетрут • 22 поставщика - понеслась:
3 года ошибок и побед.7 класс. Сравнение 1кк строк с 1кк строк • 10 поставщиков – неделя одного сравнения. • 20 поставщиков – что-то линейка товаров уже обновилась.. • 21 поставщик – терпенье и труд – все перетрут • 22 поставщика - понеслась: • Подготовка данных – 15 минут • Поиск и сравнение – 30 минут (Левенштейн за бортом) • Привет конкурентам – вы под колпаком! • ИТОГ: 91 поставщик, 25 минут подготовка, 2 часа сравнения
3 года ошибок и побед.8 класс. .select_related() и .prefetch_related() • Зло • Забыть • Переписать • …
3 года ошибок и побед.8 класс. .select_related() и .prefetch_related() • Зло • Забыть • Переписать • … • Модели с большим количеством полей – основная проблема данной магии http://pastebin.com/prxnrdRR
3 года ошибок и побед.9 класс. из 1С и в 1С – идеальный рецепт • Избыточность • Подготовка данных • Анализ • Транзакция • Скорость, защита от потерь данных, возможность отката при отказе http://pastebin.com/G0TEdA3R
3 года ошибок и побед.10 класс. Ужасный порог в 1,5 секунды • Откуда дровишки? • Нужна ли жертва для поднятия производительности? • Цена поднятия производительности до 0,03 секунд на страницу на 3х летнем проекте
3 года ошибок и побед.11 класс. Выпускной • Раз в неделю – ловим ботов
3 года ошибок и побед.11 класс. Выпускной • Раз в неделю – ловим ботов • Именных ботов – кормим дезинформацией
3 года ошибок и побед.11 класс. Выпускной • Раз в неделю – ловим ботов • Именных ботов – кормим дезинформацией • Радуемсястабильным продажам
Высшая школа Если это не правда – то уж очень хорошо придумано… (с) итальянская поговорка Спасибо! Александр Миленко alvein.flea@gmail.com skype: alexander.milenko +7 919 408 0178