@beduin01

Как избежать дублирования при загрузки данных в БД?

Есть таблица в БД. Есть данные с сайта которую я паршу. Данные на сайте меняются совсем не много. Могут появляться новые строки. Они дописываются в продолжение старых. Однако на сайте не бывает больше 30 строк (старые удаляются).

Вопрос: как реализовать дозапись в БД только новых значений? В начале делать SELECT из базы и потом сравнивать с теми значениями которые я туда хочу записать?

Или как это красивее сделать?

И второй вопрос. Как быть, если часть старых значений на сайте получила небольшое обновление, а в БД находится старая версия. Получается проще каждый раз из БД удалять все 30 записей которые там есть и записать туда новые?

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

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

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