Какие были бы ваши предложения по следующей задаче: необходимо формировать по расписанию (каждую ночь) запрос к стороннему API для получения файла данных (содержащего 100 000 записей по 14 000 товаров), обрабатывать полученные данные по определенному шаблону и загружать результат в MongoDB. Поскольку у нас нет прямого доступа к данному API, мы получаем только файл. Верно ли, что последовательность действий будет такой: использование задач Cron на NestJS для формирования запросов, парсинг полученного файла в требуемый формат и загрузка данных в базу, после чего ожидание следующей ночи? Кроме того, мне были бы интересны варианты решения вопроса о маркировке товаров. Судя по всему, каждую ночь мы получаем полный файл со всеми товарами. Как определить и отметить товары, которые были удалены или стали неактивными? Что было бы лучше: отгрузить старые данные на сервер и сравнить их с новыми, или есть определенные методы, которые можно использовать в Mongoose? Я был бы признателен за какие-либо советы или идеи по этому поводу.
Да, многие проекты собирают данные согласно определенному расписанию и загружают их в базу данных. Ваши мысли по поводу последовательности дейтсвий вполне корректны. С использованием Cron задач на NestJS, вы сможете запланировать выполнение запроса к API. Затем, полученные данные можно преобразовать в требуемый формат и загрузить в базу данных MongoDB. Потенциальная проблема связана с маркировкой товаров. Существуют несколько подходов для решения этой проблемы: 1. Можно сохранить копию предыдущего набора данных и сравнить его с новым набором данных. Товары, которые присутствуют в старом наборе, но отсутствуют в новом, могут быть помечены как удаленные или неактивные. 2. Альтернативный подход - это использование таймстампов. Когда вы получаете новый набор данных, вы можете отметить время, когда данные были получены. Затем при получении следующего набора данных, все товары, которые не были обновлены, можно пометить как удаленные или неактивные. Отметить что, оба подхода требуют дополнительной обработки и могут быть ресурсоемкими. Также стоит уточнить у владельца API, есть ли возможность получать информацию об удаленных или неактивных товарами напрямую. Это может существенно упростить задачу. Наконец, Mongoose предоставляет возможность использовать хуки middleware, которые могут быть полезными для обработки данных перед сохранением их в базе данных.
Необходимо способ выделения новых записей от старых, возможно, дублирующихся или неизменных. Если нет удобного идентификатора, самый удобный способ - получить хеш-сумму из сравниваемых данных, преобразованных в строку одинаковым способом (md5 подходит, если данных не 16-значное количество, то есть коллизии не являются проблемой). Используйте этот хеш как идентификатор и сохраните его в списке предыдущих значений для сравнения с новой загрузкой во время анализа. Записи, хеш-суммы которых не найдены в предыдущих записях, должны быть добавлены в базу данных (или обновлены, если речь идет о модификации, а не добавлении новых).