SQLinfo.ru - Все о MySQL Highload++ Junior 2017

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 01.12.2015 13:02:16

animegirl
Активист
Зарегистрирован: 28.07.2011
Сообщений: 288

Удалять или помечать?

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

Сначала была мысль делать DELETE , но потом задумалась, что если делать это постоянно к 50К-1М строчек, то насколько времени это будет напрягать базу, ведь за удалением пойдёт ещё и перестроение индекса, с другой стороны лишняя информация будет загрязнять/нагружать лишней инфой базу. Какой вариант выгоднее для лучшей производительности?

ПС: Все данные прилетают одной пачкой внутри одной транзакции.


Скажи миру - НЯ!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson