У меня есть проблема, которую мне нужно решить с помощью Node. Вопрос, который у меня возник, заключается в том, чтобы найти наилучший логический способ его решения. Любой совет приветствуется.
Сводка
Вы создадите инструмент, который импортирует расписания поездов из внешнего источника данных и сохраняется во внутренней базе данных.
Вечный источник данных
Существует служба, предоставляющая список поездов:
[{"id":1,"name":"A EXPRESS"},{"id":2,"name":"B EXPRESS"},{"id":3,"name":"C EXPRESS"},{"id":4,"name":"D EXPRESS"},{"id":5,"name":"E EXPRESS"}]
И список железнодорожных станций:
Пример для поезда "A EXPRESS":
[{"arrival":"2019-04-30T11:48:00.000Z","departure":"2019-05-01T05:42:00.000Z","service":"Loop 5","station":{"id":"ST1","name":"Waterloo"}},{"arrival":"2019-05-13T18:00:00.000Z","departure":"2019-05-14T05:00:00.000Z","service":"Loop 5","station":{"id":"ST2","name":"Paddington"}},{"arrival":"2019-05-15T04:00:00.000Z","departure":"2019-05-15T11:00:00.000Z","service":"Loop 5","station":{"id":"ST3","name":"Heathrow"}},{"arrival":"2019-05-16T20:00:00.000Z","departure":"2019-05-17T10:00:00.000Z","service":"Loop 5","station":{"id":"ST4","name":"Wimbledon"}},{"arrival":"2019-05-18T15:00:00.000Z","departure":"2019-05-19T21:00:00.000Z","service":"Loop 5","station":{"id":"ST5","name":"Reading"}},{"arrival":"2019-05-21T04:00:00.000Z","departure":"2019-05-21T21:00:00.000Z","service":"Loop 5","station":{"id":"ST6","name":"Algate"}},{"arrival":"2019-05-31T03:00:00.000Z","departure":"2019-05-31T15:00:00.000Z","service":"Loop 5","station":{"id":"ST1","name":"Waterloo"}}]
Примечание: этот поезд останавливается на станции "ST1" ("Ватерлоо") дважды.
Для выполнения
Для каждого импортированного вызова станции мы хотим сохранить самую последнюю информацию, а также историю вызова станции:
- На какую станцию звонит поезд?
- Каковы последние даты приезда и отъезда?
-Когда был импортирован вызов станции?
-Как последний раз обновлялся вызов станции?
-Как изменился звонок на станцию с течением времени? (эволюция дат прибытия и отправления с течением времени). Такая информация полезна для нас, чтобы понять, как часто поезда задерживаются, когда происходят изменения в расписании и есть ли какие-то изменения в этих изменениях.
Как это работает
-Внешним источником данных является симуляция прогнозов расписаний поездов
-Данные охватывают временной диапазон с 1 января 2019 г. по 31 мая 2019 года
-Это 5-месячное временное окно сжимается и моделируется в течение 24-часового цикла
-Этот 24-часовой цикл перезапускается каждый день в 00:00 UTC
- Источник данных предоставляет конечные точки для запроса расписаний поездов
- Конечная точка списка поездов предоставляет динамический c список поездов, которые вы можете импортировать (см. Данные выше)
- Конечная точка расписаний поездов предоставляет динамический список вызовов c станций для определенного поезда c (см. данные выше)
- Расписание поездов состоит из списка вызовов станции с различным количеством прошлых вызовов станции и будущей станции вызовы
-Этот внешний источник данных не предоставляет уникальный идентификатор для каждого вызова станции
-Это означает, что объединение вызовов станции не является простым. Это суть моего вопроса : согласование вызовов внешних станций с существующими в базе данных.
-Даты прибытия и отправления вызовов на станции обычно меняются, иногда на несколько дней. Иногда они меняются местами, их удаляют или появляются новые
- Иногда можно удалить вызовы на станции (поезд не остановится в этой указанной c станции
- Иногда могут создаваться новые вызовы на станции (поезд сделает незапланированную остановку)
- Конечная точка расписания поездов изменяет данные, возвращаемые каждые 15 минут.
Specifi c требования
Вам нужно записать 24 часа всех расписаний поездов, начиная с 00:00:00 UT C в один день и заканчивая в 23:59:59 UT C в тот же день.
Вопрос
Как видно из вышеприведенной задачи, необходимо согласовать новые импортированные данные с существующими данными при изменении новых данных.
Не существует идентификатора, который может использоваться для сопоставления посещений станции, но эти посещения должны обновляться при изменении внешних данных.
У нас есть идентификатор поезда и идентификатор станции, а также дата посещения.
Что такое лог c Я могу применить к Достаточно ли точны и актуальны данные базы данных?
Спасибо
Ответ?
Мои первоначальные мысли состоят в следующем, как бы я ни был не уверен, что это лучшее решение. Если у вас есть лучшее решение или вы видите проблему с моей, пожалуйста, дайте мне знать.
Список вызовов станции, полученных из внешней службы, всегда будет сохраняться во внутренней базе данных под ее временной меткой поиска. Это всегда будет отображаться как текущая информация в пользовательском интерфейсе (последняя запись в базе данных).
Каждые 15 минут осуществляется вызов внешней службы, и новая внутренняя запись добавляется во внутреннюю базу данных и отражается в пользовательском интерфейсе.
Статус последней записи должен отражать разницу между самой последней записью и предыдущей записью. Например, задерживается на X мин, отменяется и т. Д. c. Это сложная часть, потому что текущее посещение станции должно быть сопоставлено с предыдущим посещением станции.
Я думаю, что конкретный c поезд должен просто найти соответствующий идентификатор станции.
Если нет предыдущего совпадающего идентификатора станции, то статус «новый».
, если есть предыдущий идентификатор станции, и нет в соответствии с текущим идентификатором станции, статус «отменен».
если имеется один совпадающий идентификатор станции, то время сравнивается, и статус обновляется до «раннего» или «отложенного» ».
Если имеется более одного совпадающего идентификатора станции, сопоставляются предыдущий и текущий идентификаторы станции с ближайшими временными метками, и их статус обновляется соответственно на «ранний» или «отложенный».
Правильны ли мои логики c?