- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Тренды маркетинга в 2024 году: мобильные продажи, углубленная аналитика и ИИ
Экспертная оценка Адмитад
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть такая опция, когда пользователи обновляют Базу данных с помощью CVS файла.
Но файлы достаточно большие. 1-2 мегабайта.
Каждая строчка содержит госномер машины, VIN и компанию, в которой застрахована машина, а так же периоды страховки ее и другую информацию.
При загрузке в БД идет сначала проверка, нет ли такого авто уже в БД. Если есть, то его необходимо просто обновить. Если нет, то добавить новую запись.
У меня данная конструкция получается очень сильно громоздкой.
И скрипт есть очень много ресурсов, потому что очень много запросов в БД. Подскажите пожалуйста, как можно максимально оптимизированно обрабатывать файл?
Вот пример CSV файла.
Вот код обработки
Понимаю, что все это дико неоптимизированно. Но где можно поправить?
как вариант закачать файл во временную таблицу
Затем update существующих с пометкой, что запись обработана
Затем инсерт необработанных записей.
REPLACE осчастливит автоматическим апдейтом существующих и добавлением отсутствующих.
Просто Replace будет ли работать?
Не меняются только номера машин VIN. А вот некоторые остальные данные в линии меняться могут.
Просто Replace будет ли работать?
Не меняются только номера машин VIN. А вот некоторые остальные данные в линии меняться могут.
Будет.
Маленький нюанс. Если REPLACE понимает, что запись с таким VIN уже есть, то сначала удалит старую, а потом вставит новую. Как бы если данных много, то лучше использовать INSERT ON DUPLICATE KEY UPDATE, в своих нагруженных проектах я делаю так.
У MySQL на этот счет есть свои средства:
У MySQL на этот счет есть свои средства:
Отличная команда. Спасибо. Тогда еще один вопрос. Как вы видите из кода, он обычную дату превращает в unix timestamp, И часть полей он дублирует в другие таблицы с указанием внешнего ключа. Так же, часть данных преобразовывает на основании других таблиц.
Как решить этот вопрос?
если некоторые поля не соответствуют, то сделайте в таблице временные поля под это дело.
А потом после импорта, парой других запросов приведите все в соответствие.
К примеру обработку даты как то так :
В общем часть работы вполне можно переложить на базу, а уж обрабатывает она данные гораздо шустрее :)
Спасибо большое. =)