Как правильно построить логику приложения?

Помогите пожалуйста, не хватает логического(технического мышления) в голове не могу логическую цепочку замкнуть
Надо придумать решение, что бы всегда в бд были уникальные данные
И так, есть парсер, паршу доски объявлений
1.Получаю данные, массив записываю как строку
2.JSON.parse(data) распарсил, отдал боту (Допустим пришло 10 объектов)
3.Делаю повторно запрос
И тут у меня логический провал, как мне сравнивать данные
а) Допустим первый раз пришло 10 объектов, им нет пары - я их все отправил боту.
б) Второй раз делаю запрос, получаю 10 объектов еще сверху, 10+10 = 20, каждому объекту есть пара, сравниваю объект = объект - удаляю (если ничего не менялось).
(ну в базе данных накапливать информацию не знаю хорошее ли решение), поэтому считаю, что надо удалять пары
в) Ну допустим если что-то поменялось, было 10 объявлений, пришло еще 10 новых(5 из них уникальных)
1-obj {a:'a'} - ------ {a:'a'}
2-obj {a:'a'} - ------ {a:'a'}
3-obj {a:'a'} - ------ {a:'a'}
4-obj {a:'a'} - ------ {a:'a'}
5-obj {a:'a'} - ------ {b:'b'}
6-obj {a:'a'} - ------ {b:'b'}
7-obj {a:'a'} - ------ {b:'b'}
8-obj {a:'a'} - ------ {b:'b'}
9-obj {a:'a'} - ------ {b:'b'}
10-obj {a:'a'} - ------ {b:'b'}
и тут уже возникают проблемы первые объекты перезатрутся, а нижнее {a:'a'} хоть и не уникальны, отправятся в бота
г) Если я получил 10 уникальных объектов, сделал запрос повторно, получил еще 10 объектов, они перезатерлись все ок(если не было новых объявлений), но если я делаю третий раз запрос, то у меня нет пар новым значениям и они все считаются уникальными
что мне емае делать, как выйти из этой ситуации
сравнивать по дате публикации я не могу, ибо у всех площадок разные форматы (кто-то постит только время, кто-то дату, кто-то вообще не отдает данные, вроде "Новое", "Недавнее" и.т.д)
Я думал еще про вариант с current date, но опять же я не могу сравнивать карент дату с разными форматами обновления на сайте(строчка выше)(ну либо не понимаю как это делать
6257058dddcf9031413625.png
  • Вопрос задан
  • 239 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега JavaScript
{PHP, MySql, HTML, JS, CSS} developer
Найти параметры неуникальности, то есть определить что такое дубликат.
По этим параметрам либо создать хеш и хранить его отдельным полем в таблице, либо, если это 1 поле, проверять уникальность по нему.
Ставим на поле с хэшем уник, при добавлении делаем инсерт он дупликэйт игнор.
Все.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@rPman
Если у загружаемых данных (объектов) нет какого то уникального идентификатора, сделай его из самих данных, взяв к примеру md5 хеш из строки, в которую сериализовал данные (только если внутри есть списки, постарайся чтобы порядок в них не гулял или отсортируй их, речь идет исключительно для получения строки, которая будет для одних и тех же данных всегда одинаковой)

А дальше все просто, храни этот идентификатор рядом с данными в базе и в момент записи проверяй уникальность именно по нему

p.s. осторожно, хеш не гарантирует отсутствие коллизий, т.е. что разные данные не дадут одинаковый хеш, с другой стороны вероятность этого события очень мала и пока ты не перекапываешь весь интернет, ты с этим не столкнешься, ну в крайнем случае можно подобрать функцию хеширования с большей битностью для уменьшения этой вероятности
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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