Mysql INSERT большого количества данных - нужен совет

BigLebowski

Новичок
Добрый день

Есть парсер, который на вход получает гигантскую массу данных
За раз их все в базу внести нереально - просто не хватит времени на исполнение скрипта и памяти mysql в настройках сервера. Настройки эти мне не подвластны, поэтому менять их не вариант.
Делю их на небольшие insert'ы и записываю по частям
Но есть такой момент: что делать, если предположим, на 4м запросе все, не дай Бог, свалится?
Кто что может посоветовать?
Данные надо заносить именно через php скрипт, который запускается cron'ом
 

prolis

Новичок
Можно делить данные блоками например по 1к строк и писать в csv-файл, а затем другим кроном пробегаться по директрии с ними и загружать в базу. Если после импорта вставилось меньше 1к записей, значит что-то пошло не так и логировать это. А можно и не делить блоками, но где-то помнить, сколько данных должно вставиться из файла.
В случае аварии файлы с данными не удалять.
 

BigLebowski

Новичок
В чем в данном случае преимущество работы с csv , а не напрямую с sql?
Т.е. в логах записывать какие файлы были обработаны, а какие нет, и при сбое перезаписывать те данные, которые записаны не были?
Что делать в такой ситуации:
файл пошел в обработку, но на середине файла система упала
как внести остальную часть данных из этого файла, не продублировав то, что уже было внесено до падения?
 

prolis

Новичок
В чем в данном случае преимущество работы с csv , а не напрямую с sql?
Один крон занимается только парсингом, второй только загрузкой данных в базу. Напрямую писать в базу вам по вашим словам времени и памяти не хватает. Если подразумвается sql-файл, то разницы большой нет
Т.е. в логах записывать какие файлы были обработаны, а какие нет, и при сбое перезаписывать те данные, которые записаны не были?
тут проще - вне зависимостиот сбоев, второй крон всегда должен стараться закинуть файлы данных в базу и если не получается то писать в лог а багнутый файл переложить для разбора.
Что делать в такой ситуации:
файл пошел в обработку, но на середине файла система упала
как внести остальную часть данных из этого файла, не продублировав то, что уже было внесено до падения?
Посмотрите на возможности коммитов. Если система упала - то откат вставки всего файла до разбора полетов
 

keltanas

marty cats
файл пошел в обработку, но на середине файла система упала
Используй INSERT ... VALUES ( ... ), ( ... ), ( ... ) [ON DUPLICATED KEY UPDATE]
Запрос либо выполнится, либо вернет ошибку.

Данные надо заносить именно через php скрипт, который запускается cron'ом
А что ты будешь делать, если скрипт запустится кроном 2 раза?
 

Фанат

oncle terrible
Команда форума
просто не хватит времени на исполнение скрипта и памяти mysql в настройках сервера. Настройки эти мне не подвластны, поэтому менять их не вариант.
С какого перепугу это?
Ты пробовал? И какое же ограничение на работу скрипта? И сколько "памяти mysql" было съедено?
 
Сверху