@kaxa3201

Как быстрее записать в базу PosgresQl?

Имеется 700 000 записей. есть скрипт который парсит csv файл и записывает данные в базу.
Запись идет очень долго примерно 200 записей в секунду. Подскажите можно ли как то это дело ускорить?
foreach ($ipPool as $ip) {
                    $date = new \DateTime($csv[5]);
                     Resource::updateOrCreate([
                        'ip'           => trim($ip),
                        'domain'       => $csv[1],
                        'url'          => $csv[2],
                        'organization' => $csv[3],
                        'number'       => $csv[4],
                        'date'         => $date,
                    ], [
                        'ip'           => trim($ip),
                        'domain'       => $csv[1],
                        'url'          => $csv[2],
                        'organization' => $csv[3],
                        'number'       => $csv[4],
                        'date'         => $date,
                        'version_date' => $updatedDate
                    ]);
                }
  • Вопрос задан
  • 214 просмотров
Пригласить эксперта
Ответы на вопрос 2
Melkij
@Melkij
PostgreSQL DBA
Быстрее всего - COPY запросом.
При том, сразу из csv файла, локального к СУБД.

Через приложение - сильно лучше тоже COPY. В PDO интерфейс для COPY, впрочем, ужасен.
Хуже - относительно большими insert
ещё хуже - кучей запросов в транзакции
кучей запросов вне общей общей транзакции - очевидно будет очень медленно.
Ответ написан
Комментировать
Konata69lol
@Konata69lol
backend developer (php/go)
Надеюсь, не циклом по одной модели за раз пишется.
Делайте batch insert штук по 1000-10000 (оптимальное кол-во подбирается опытным путем).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы