Чтобы максимально быстро добавить огромное количество записей в БД без дублей с использованием фреймворка Laravel, можно применить несколько оптимизаций.
1. Используйте массовое добавление данных (bulk insert) с помощью метода insert
фасада DB
. Пример:
$data = [...]; // Массив данных для добавления DB::table('table_name')->insert($data);
2. Примените метод chunk
при добавлении больших объемов данных. Этот метод позволяет обрабатывать данные порциями, что может увеличить производительность и устранить проблемы с памятью при обработке больших объемов данных. Пример:
$data = [...]; // Массив данных для добавления $chunkSize = 500; // Размер порции данных collect($data)->chunk($chunkSize)->each(function ($chunk) { DB::table('table_name')->insert($chunk->toArray()); });
3. Используйте механизм отложенной проверки уникальности данных (Deferred Constraint Checking) с помощью метода disableForeignKeyConstraints
фасада Schema
. Это позволит временно отключить проверку на уникальность записей при добавлении данных, что значительно ускорит процесс. Пример:
Schema::disableForeignKeyConstraints(); $data = [...]; // Массив данных для добавления DB::table('table_name')->insertOrIgnore($data); Schema::enableForeignKeyConstraints();
4. Используйте метод insertOrIgnore
для добавления данных. Этот метод добавит записи в таблицу, пропустив дубликаты. Пример:
$data = [...]; // Массив данных для добавления DB::table('table_name')->insertOrIgnore($data);
5. Если возможно, разбейте процесс добавления данных на параллельные задачи или использовать очереди обработки задач с помощью Laravel Queue. Это позволит распараллелить процесс добавления данных и ускорит его выполнение.
Важно помнить, что при добавлении большого объема данных может возникнуть проблема с памятью или производительностью. Необходимо оптимизировать запросы, использовать индексы, делать бэкапы базы данных перед массовым добавлением данных и применять другие советы по оптимизации работы с БД.