PHP: лучшие варианты для обработки csv-файлов с помощью механизма очереди для массовых вставок в базу данных mysql - PullRequest
1 голос
/ 01 марта 2020

ищет несколько общих советов о том, как go об этом. У меня запланированы следующие задачи:

Следующее уже работает: .
Пользователь отправляет файл CSV через форму на моем сайте.
Файл / URL-адрес файла отправляется на другой сервер для обработки (l oop через каждую строку csv, подключитесь к моему сайту WordPress и создайте каждый элемент как продукт с помощью API REST WooCommerce).

Чего я хочу достичь: .
Если, например, 5 человек отправляют CSV примерно в одно и то же время, то есть много записей в базу данных одновременно (некоторые из файлы могут иметь 500, 1000+ строк). Я бы предпочел сделать систему «очереди»:

  • 1 CSV-файл получен.
  • Обработка файла, создание всего продукта и т.д. c.
  • Когда закончите, перейдите к следующему CSV и обработайте его следующим.

Примечание: Когда я говорю, что CSV получен, я просто передаю URL CSV и выполняю file_get_contents в скрипте, который его обрабатывает.

1 Ответ

1 голос
/ 01 марта 2020

Первое замечание: у вас высокая рабочая нагрузка, которая зависит не только от количества файлов, но и от длины одного файла. Например. у вас есть CSV с 1000+ строк. Этот тип файла будет блокировать вашу очередь на длительное время и потреблять много mysql зарезервированной памяти.

Так что я буду двигаться следующим образом:

  1. Возьмите любой файл и переведите его в серию mysql множественных запросов . Таким образом, вы уменьшаете количество циклических переходов с mysql до приложения, которое может произойти, если вы сделаете отдельные вставки. Учтите, что наилучшим способом является разделение любого файла в сценариях массовой вставки из 200 записей, чтобы избежать высокого потребления памяти mysql, что могло бы замедлить процесс.

  2. Создание задания очереди для любого сценария массового импорта, который вы создаете и отправляете в свой процессор очереди, я бы не стал использовать задание cron и перейти к реализации ampq, используя эту библиотеку-обертку: php -amqlib в качестве отправной точки.

  3. Не использовать file_get_contents, но fgetcsv , поскольку загрузка всего файла за один раз и обработка вручную может быть не лучшим вариантом.

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