dd

Оптимизация

Написано

в

Я увеличил скорость импорта прайсов в 3 раза!
Звучит очень круто, да? А теперь reality check: вместо 480 секунд стало 320 секунд😩
Да, результат всё ещё говно, хотя я за выходные всю голову сломал что ещё можно сделать
Чтобы эти цифры выглядели не совсем плохими, поясню, что в файле импорта 37 тысяч записей, которые надо с кучей правил сложить в базу, при этом при появлении дублей по определённым полям, надо распихать значения в другие таблицы, чтобы их не потерять (так требует бизнес)

Итак, что я пробовал и что выгорело:
1. Группировка мелких запросов на апдейт в базу и отправка одним куском
Это снизило время импорта на 1/6 просто потому что теперь вместо 15 запросов теперь уходил 1
2. При нахождении полных дублей не делать запросов вообще
При первичном кодировании этого функционала такой вариант развитий я не учёл; показания скорости после этого разнятся — где-то импорт ускорился в 3 раза, где упал до 0.9

Что я пробовал и что сделало всё только хуже:
1. Вынос функционала по сохранению дублящихся значений в отдельную команду и вызов через MessageBus
Говно идея, скорость импорта упала в два раза на всех позициях просто хотя бы ввиду постоянного создания объекта
2. Страшные sql-запросы, которые upsert'ят запись и тут же обновляют все другие записи, проставляя служебные поля новым айднишником
Это вообще жуть — прайс, грузившийся за минуту стал грузиться 3 и более; причина простая — common table expression + update оставляют в базу в полнейшем шоке и она начинает тупить

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *