Как лучше организовать базу и обновление данных товаров MySQL?

Есть база с товарами 2млн наименований и ценами, обновляется ежедневно 300-400к наименований, т.е. надо удалить товары поставщиков старые и добавить новые. Каждый день это перегружает очень сильно базу и сервер периодически падает. Подскажите пожалуйста как лучше организовать обновление для снижение нагрузки. Таблица одна ИД, ПОСТАВЩИК, НАЗВАНИЕ, ЦЕНА. По названию идет полнотекстовый поиск. Сейчас таблица в формате MyISAM, база данных MySQL. Буду рад любой помощи как лучше поступить в такой ситуации.

UPD:
Импорт идет из XML файла, если появляется поставщик которые обновляется, то из таблицы удаляются все записи по нему, т.е. для примера DELETE FROM baza WHERE postavshik = 2
и затем в базу добавляются множественным INSERT по 10000 строк. За одно обновление может обновиться по 40-50 поставщиков общее кол-во наименований у каждого примерно 10-20к
  • Вопрос задан
  • 449 просмотров
Пригласить эксперта
Ответы на вопрос 3
загружаем во временную(-ые) таблицу(-ы), затем лочим базу, удаляем существующую(-ие) таблицу(-ы) и переименовываем временные
Ответ написан
Комментировать
ivankomolin
@ivankomolin
Нужно больше информации, как организовано удаление и создание новых записей?
Может вы в цикле по одной записи удаляете и также добавляете)))
Думаю, такие операции не должны сильно перегружать сервер, если использовать множественный insert
Ответ написан
@whats
блокировка сама произойдет. И ему наверное нужно не удалить все, а потом залить по новому, а пачкой обновить лишь существующие цены. Но вариант тот же, временная таблица куда с помощью load data загрузить новую пачку данных. Далее или по ИД или по двум другим полям удалить все записи из основной таблицы. удаление будет быстрое если есть индекс по сверяемым полям. Третьим этапом необходимо сделать инсерт по другой таблице.

У меня сейчас есть аналогичная ситуация, только база состоит из более 50 млн позиций, и каждый день может обновляться до 30 млн позиций. В начале я гружу csv файл во временную таблицу. Удаление идет по полю - производитель, наименование и потом инсерт. Все это дело на постгресе - время выполнения такой операции при 100 тысячах записей составляет менее секунды. Ничего не блокируется при этом
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы