Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица в базе, туда будет падать статистика собираемая парсерами с других источников. По логике приложения (пожелания руководства), данные надо перезаписывать, наплевав на версионность изменений и логирование того, что было. Другими словами - раз в час (а может и чаще) парсер будет выдёргивать с разных источников информацию, которая будет добавлять по несколько десятков тысяч строк. Сейчас запись идёт через "INSERT INTO ... ON DUPLICATE KEY UPDATE ...", то есть если данные новые, то добавить, если уже была запись, то надо обновить. Столкнулась с таким моментом, что иногда по некоторым ключам данные пропадают совсем, а не изменяется их значение, что приводит к рассинхрону и не верным данным в нашей базе. Варианты, которые я вижу для решения проблемы:
1. Перед добавлением строк, прогонять по временному участку, который они в себе несут команду "DELETE" предыдущего варианта.
2. Добавить поле-метку, оставляя старый вариант, ставя ему флаг "скрыть" из последующей выдачи.
3. Менять в начале всем поле счётчика на ноль, потом обновлять, а при выдачи нули скрывать на уровне скрипта выдачи приложения.
Сначала была мысль делать DELETE , но потом задумалась, что если делать это постоянно к 50К-1М строчек, то насколько времени это будет напрягать базу, ведь за удалением пойдёт ещё и перестроение индекса, с другой стороны лишняя информация будет загрязнять/нагружать лишней инфой базу. Какой вариант выгоднее для лучшей производительности?
ПС: Все данные прилетают одной пачкой внутри одной транзакции.
Неактивен