@click_f

Как правильно вносить данные в БД?

Есть необходимость подтягивать обновления из стороннего сервиса через REST-api и вносить их в локальную базу данных, другими словами просто актуализировать локальную БД в реальном времени.
К сожалению на стороннем сервисе отсутствует возможность "подписаться на обновления", но можно получать данные за определенный промежуток времени либо последние n записей.

Вопросы в следующем:
1. Какого паттерна следует придерживаться?
2. Это ведь очень идиотская идея: реализовать Watcher'a который будет постоянно слать запросы и проверять есть ли только что полученные данные в базе?
3. Какова главная идея решения подобных задач "Актуализации данных"? Чего следует не делать, а что напротив стоит?

Заранее очень благодарю за любый советы.
  • Вопрос задан
  • 584 просмотра
Решения вопроса 2
Так как локальные данные запрашиваются через свой API, то я бы это реализовал по похожему принципу, как работает кеширование. По запросу данных из вашего API, происходит проверка на то, как давно данные обновлялись. Если давно (регулировка времени на своё усмотрение), то происходит запрос на сторонний сервис и данные в локальном хранилище обновляются и сохраняется время последнего обновления. Минус этого подхода в том, что первый запрос в некий промежуток времени будет обрабатываться дольше из-за всех операций.

Если не критично, можно обновлять данные в локальном хранилище после обработки запроса, дав клиенту "устаревшие" данные, чтобы избежать этой паузы. Следующим запросом клиент уже получит актуальные данные, т.к. к этому моменту они скорее всего успеют обновиться.

Но для решения вашей проблемы нужно учитывать больше нюансов, это лишь общий ответ на основе информации в вопросе.
Ответ написан
Комментировать
Falseclock
@Falseclock
решаю нестандартные задачи
У меня был похожий случай.

1. Имеем веб морду.
2. Есть большая таблица, в которой куча табличных ячеек.
3. Необходимо на всех клиентских машинах отображать актуальные данные без перезагрузки страницы

Я сперва реализовал следующим образом:

1. Поднял WebSocket который слушали все клиенты.
2. Поднял демона, который опрашивал Rest и вытаскивал данные.
3. В случае новых данных демон сувал их в базу и через WebSocket отправлял широковещательное сообщение в виде JSON строки.
4. Со стороны клиента через JS вытаскивал данные с сокета и обновлял пользователю интерфейс.
5. Все пользователи имеют актуальные данные без перезагрузки страницы.

Как опрашивал Rest.
1. Создал табличку text + int.
2. В text хранил название таблицы интерфейса, в int - последний инкремент
3. Опрашивал с условием > int
4. Ложил в локальную базу.
5. Оповещал клиентов по WebSocket

Сечас немного по другому. В 1С есть подписка на события, при изменении или создании документа можно вызвать обработчика, в моем случае просто происходил HTTP запрос с передачей данных в post теле JSON сериализации.

В вашем случае, если не важно и не актуально, либо не возможно изменение документа - только такой вариант: постоянный опрос.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽