Согласование данных расписания (решение проблемы логики c) - PullRequest
1 голос
/ 10 января 2020

У меня есть проблема, которую мне нужно решить с помощью 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?

...