@Snewer

Как оптимально импортировать часто изменяемые записи из файла в бд?

Здравствуйте!

Есть база данных с каталогом продукции (mysql) в которую нужно часто импортировать большой объем записей из CSV файлов, из различных API. У каждого источника есть свой идентификатор (shop_id).

Как организовать импорт данных? Рассматриваю такой вариант:
- Открыть транзакцию
- Удалить все записи для импортируемого shop_id
- Добавить все записи из источника
- Закоммитить транзакцию

На каждый источник порядка 50к записей, импортировать каждый источник нужно каждый час.
Что можете посоветовать? Спасибо.
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
inoise
@inoise
Solution Architect, AWS Certified, Serverless
А вам обязательно гарантировать целостность данных? Понятное дело что это хорошо, держать все под контролем, но занимает определенное время и блокирует операции. Плюс, что с целостностью идентификаторов?
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
UPDATE `table` SET `to_delete` = 1 WHERE `shop_id` = :shopId;

LOAD DATA 
  INFILE 'shop.txt' REPLACE
  INTO TABLE `table`
  (`article`, `name`, ...)
  SET `shop_id` = :shopId, `to_delete` = 0;

DELETE FROM `table` WHERE `shop_id` = :shopId AND `to_delete` = 1;
Ответ написан
Комментировать
@Vitsliputsli
А в чем проблема? Заливайте во временную таблицу и из нее обновляйте, 50к записей это мелочи.
Ответ написан
@rPman
Если вышеописанные советы (заливаете данные во временную таблицу а потом delete + insert + commit) будут сильно нагружать базу, попробуйте вместо удаления делать update (имеет смысл если ваш скрипт единственный, кто правит данные, тогда не придется блокировать таблицу), однозначно это будет на порядок быстрее, так как почти наверняка в старых данных и в новых изменения минимальны (цены и небольшое количество новых и удаленных товаров).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы