Парсер данных из файла

185
15 декабря 2016, 15:55

Подскажите пожалуйста, как корректно реализовать парсер данных. Описание: Имею длинный список, все данные из этого списка удаляются раз в месяц, так что довольно длинный получается. Ранее толком персерами не занимался, интересует логика сего. В данный момент:(в каждой строчке списка указано id время кол-во имя)

Открываем файл. 
 Создаю подключения с БД.
  цикл{
   выбираю строку
   проверяю не пуста ли она
    запрашиваю из таблицы данные(обычный select сравниваю по id и времени)
     если запись в базе присутствует, переходим к следующей строке
      если нет, то заносим в базу данных данные из строки.
    }
    закрыли подключение.
    закрыли файл.

Меня пугает получившееся в итоге куча mysql запросов... Что скажете по этому поводу?

Answer 1

Посмотрите в сторону MERGE в SQL и ее аналога в MySQL (INSERT ... ON DUPLICATE KEY UPDATE). Как минимум это уже сократит ваши запросы к БД: проверка будет выполняться на стороне БД.

Второй вариант - писать все данные подряд во вспомогательную (временную) таблицу, не думая о дубликатах. Дубликаты отлавливать позже на стороне БД.

Третий вариант - обработать файл, подготовить массив, отфильтровав дубликаты, потом писать в БД.

Все сильно зависит от конкретных условий: частоты выполнения скрипта, размера файла.

UPD. LOAD DATA INFILE - для быстрого заливания данных в БД из текста (можно и без парсера обойтись в вашем случае - границы между полями и записями жестко заданы). Тогда алгоритм такой:

  1. Залить данные во вспомогательную таблицу
  2. При помощи INSERT... SELECT записать новые данные в основную таблицу (выбрать все записи, ID которых больше максимального в основной таблице)
  3. Очистить вспомогательную таблицу
READ ALSO
IDE для написания SQL структуры таблиц

IDE для написания SQL структуры таблиц

Подскажите хорошую IDE(если такова существует)

126
Запрос на выбор уникальных записей с таблицы MySQL по дате

Запрос на выбор уникальных записей с таблицы MySQL по дате

Есть таблица (выше)Необходимо выбрать записи по полю "data" с 2013-06-17 по 2013-06-24, чтобы в результате выводились уникальные записи по полю "id2", и что...

140