Как избежать дублирования при загрузки данных в БД?
Есть таблица в БД. Есть данные с сайта которую я паршу. Данные на сайте меняются совсем не много. Могут появляться новые строки. Они дописываются в продолжение старых. Однако на сайте не бывает больше 30 строк (старые удаляются).
Вопрос: как реализовать дозапись в БД только новых значений? В начале делать SELECT из базы и потом сравнивать с теми значениями которые я туда хочу записать?
Или как это красивее сделать?
И второй вопрос. Как быть, если часть старых значений на сайте получила небольшое обновление, а в БД находится старая версия. Получается проще каждый раз из БД удалять все 30 записей которые там есть и записать туда новые?
Поясню на примере. На сайте каждые день выкладываются измерения. Каждые день - новая строка. Однако бывают случаи, когда вчерашние измерения корректируются задним числом.
Кроме описанного вами варианта есть еще один - можно в базе создать триггер с активацией перед вставкой строки, и в этом триггере выполнять всю работу по поиску дубля и его коррекции.
Это будет немного быстрее (данные не будут гоняться туда-сюда между БД и приложением).
MySQL? Если корректно определен праймари (либо уникальный) индекс в таблице, можно использовать вместо INSERT/UPDATE простой REPLACE.
Некрасиво :) и немного медленно (т.к. MySQL фактически делает две операции вместо одной), зато просто и старые данные обновлять автоматом не проблема. Да и для 30 записей в пакете некритично в плане быстродействия. dev.mysql.com/doc/refman/5.5/en/replace.html