Имахме подобна ситуация. След много опити да направим скрипта по-добър, решихме, че се нуждаем от друг подход, за да накараме импортирането ни да работи и да не отнеме ~10 часа.
Това, което направихме, беше да изхвърлим целия PHP код и вместо това да използваме mysqlimport
за да заредите съдържанието на CSV файла директно в таблица. Тази таблица вече съдържа всичко, от което се нуждаем, но не във форма, която е полезна за нас (няма структура, някои полета се нуждаят от обработка и т.н.)
Въпреки това, тъй като всичко вече е в базата данни, можем да направим всичко, което искаме със заявка. Например, изтриването на всички данни, които вече не са във файла за импортиране, това е просто DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL;
, актуализирането на съществуващи записи е просто UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField);
.
Очевидно за сложен скрипт за импортиране вашите заявки ще бъдат по-сложни и ще ви трябват повече от тях. Може дори да се наложи да хвърлите някои съхранени процедури, за да извършите обработка на отделни полета. Но ако можете да приложите този подход, ще се окажете с процес, който може да обработва много данни и е много мащабируем.