Доброго времени суток!
Нужен теоретический совет, имеется недостаток опыта.
Есть западный агрегатор новостей с открытым API. Мой код стучится туда, получает пакет топ-новостей в json за текущие сутки и обрабатывает его для внесения в базу данных, допустим, sqlite3.
Перед записью в базу у меня образуется следующий словарь, его я и буду писать в базу по итогам запроса:
{'source': 'CNN', 'author': 'Analysis by Stephen Collinson, CNN', 'title': "Trump's post-Covid bubble is popping - CNN", 'description': "America's single worst day of new coronavirus cases.", 'url': 'Тут URL статьи', 'urlToImage': 'Тут URL картинки к статье', 'publishedAt': '2020-06-26T05:33:51Z', 'content': None}
В течение дня новости могут добавляться, а пользователь может запрашивать обновление топ-новостей не один раз за сутки.
Мне нужно избежать ситуации, когда одна и та же новость будет записываться в базу дважды или более раз.
У меня есть следующие мысли:
Нужен теоретический совет, имеется недостаток опыта.
Есть западный агрегатор новостей с открытым API. Мой код стучится туда, получает пакет топ-новостей в json за текущие сутки и обрабатывает его для внесения в базу данных, допустим, sqlite3.
Перед записью в базу у меня образуется следующий словарь, его я и буду писать в базу по итогам запроса:
{'source': 'CNN', 'author': 'Analysis by Stephen Collinson, CNN', 'title': "Trump's post-Covid bubble is popping - CNN", 'description': "America's single worst day of new coronavirus cases.", 'url': 'Тут URL статьи', 'urlToImage': 'Тут URL картинки к статье', 'publishedAt': '2020-06-26T05:33:51Z', 'content': None}
В течение дня новости могут добавляться, а пользователь может запрашивать обновление топ-новостей не один раз за сутки.
Мне нужно избежать ситуации, когда одна и та же новость будет записываться в базу дважды или более раз.
У меня есть следующие мысли:
- Создать уникальный индекс, скажем, склеив publishedAt + source (время публикации + источник) – маловероятно, что время публикации нескольких статей в «Вашингтон Пост» совпадет с точностью до секунды, а если и совпадет, то авторы будут разные, таким образом, у нас будет уникальный индекс
- Создать уникальный индекс по url, здесь у нас уникальность будет гарантирована, но это же строка большой длины, вроде как когда-то где-то я слышал, что это нехорошо для скорости работы базы данных.
- Создать уникальный индекс по времени публикации (publishedAt) – топ новостей за сутки не бывает много, ну совпадут две публикации по времени секунда в секунду, ну и хрен с ними, одну из записей просто не будем писать, правда, пользователь тогда рискует не узнать о начале третьей мировой войны )
- Ну еще можно было бы создать хеш по какому-либо полю, и его писать в базу в качестве уникального индекса, но мне кажется, это уж слишком замудреное решение