Когда Laravel Validator становится узким местом при импорте 50 000 строк

Wait 5 sec.

PHP 7.4 / Laravel 8 / PostgreSQL 13Проблема: импорт 50 тысяч строк занимал около 45 секунд.Первое подозрение: база данных, INSERT, UPSERT, индексы, размер batch и количество запросов.Реальность: бОльшая часть времени уходит на валидацию.Мы начали разбираться, почему проверка нескольких десятков обычных полей на большом массиве данных оказалась значительно дороже самой записи в PostgreSQL. В итоге удалось сократить время валидации с 42,5 секунды до 0,65 секунды, а длительность всего job — примерно с 45 до 4 секунд.В статье покажу, что именно оказалось узким местом, почему стандартный Laravel Validator оказался не самым подходящим инструментом для этого конкретного сценария и почему мы не стали от него отказываться. Читать далее