Подскажите пожалуйста, как корректно реализовать парсер данных. Описание: Имею длинный список, все данные из этого списка удаляются раз в месяц, так что довольно длинный получается. Ранее толком персерами не занимался, интересует логика сего. В данный момент:(в каждой строчке списка указано id время кол-во имя)
Открываем файл.
Создаю подключения с БД.
цикл{
выбираю строку
проверяю не пуста ли она
запрашиваю из таблицы данные(обычный select сравниваю по id и времени)
если запись в базе присутствует, переходим к следующей строке
если нет, то заносим в базу данных данные из строки.
}
закрыли подключение.
закрыли файл.
Меня пугает получившееся в итоге куча mysql запросов... Что скажете по этому поводу?
Посмотрите в сторону MERGE в SQL и ее аналога в MySQL (INSERT ... ON DUPLICATE KEY UPDATE). Как минимум это уже сократит ваши запросы к БД: проверка будет выполняться на стороне БД.
Второй вариант - писать все данные подряд во вспомогательную (временную) таблицу, не думая о дубликатах. Дубликаты отлавливать позже на стороне БД.
Третий вариант - обработать файл, подготовить массив, отфильтровав дубликаты, потом писать в БД.
Все сильно зависит от конкретных условий: частоты выполнения скрипта, размера файла.
UPD. LOAD DATA INFILE - для быстрого заливания данных в БД из текста (можно и без парсера обойтись в вашем случае - границы между полями и записями жестко заданы). Тогда алгоритм такой:
Сборка персонального компьютера от Artline: умный выбор для современных пользователей