PHP / Symfony: запись в большой файл CSV - PullRequest
0 голосов
/ 13 июня 2018

Спасибо за помощь.

My Spec:

  1. У меня очень большой файл CSV
  2. Мне нужно обработатьфайл и вывод другого большого файла CSV

Моя среда:

  1. php7.0
  2. Symfony 3.4 framework

Мое текущее решение:

Я использую Symfony Serializer для чтения моего файла, затем я обрабатываю свой файл и выводю файл.Все в памяти.Операция занимает около 20 минут.

Я запускаю скрипт из команды Symfony.У меня есть служба для чтения файла и служба для экспорта файла.

Улучшенное решение 1:

  1. Я могу загрузить CSV-файл в таблицу базы данных, как объяснено здесь , с помощью «LOAD DATA»ЛОКАЛЬНЫЙ ИНФИЛЬ "sql запрос.Очень быстрая операция
  2. Затем я могу обработать свои данные и сохранить их в другой таблице
  3. Затем я бы использовал "SELECT ... INTO OUTFILE 'file_name'" для вывода файла

Преимущество: -SQL по центру - Нет проблем с памятью

Отключение: -ДБ операции во время обработки могут быть дорогими

Улучшенное решение 2:

  1. Я могу читать файл CSV строка за строкой
  2. Я обрабатываю строку
  3. Я записываю строку в выходной файл

Adv:Нет проблем с памятью. Disav: может занять много времени.

Улучшенное решение 3:

  1. Я могу загрузить файл CSV в таблицу базы данных, как объяснено здесь , с запросом sql «LOAD DATA LOCAL INFILE».Очень быстрая операция
  2. Затем я могу обработать свои данные по 1000 штук и записать их в файл

Какое решение вы бы использовали?Или у вас есть лучшее решение?

1 Ответ

0 голосов
/ 13 июня 2018

решение 2, без базы данных.Чтение из csv, обработка и вывод в csv, как кто-то упоминал в комментариях, используйте fgetcsv() и fputcsv().Движение строка за строкой вряд ли должно занимать память, и это устранит необходимость в базе данных между ними.Проблема с этими типами операций заключается в последовательном чтении CSV-файлов в виде потоков, в конечном итоге скорость процесса будет сводиться к скорости операций с данными между операциями чтения и записи.Использование базы данных между ними просто замедлит весь процесс и будет несколько расточительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...