Синхронизация данных в базах данных

171
17 сентября 2019, 20:30

Хочу импленментировать синхронизацию баз данных между удаленными машинами. Все происходит так: embedded система собирает данные и при возможности выхода в сеть POST-ит ее на сервер, сервер принимает GET запросы от клиентов, все в одностороннем порядке. Но не могу определиться с способом отправки данных на сервер с встроеной системы. Первое что приходит на ум:

  • Встроенная система, при возможности подключиться к серверу, делает GET запрос и узнает какой последний id записи там лежит и делает выборку в своей базе всех записей которые были сделаны позже(т.е. имеют больше id) и постит все что не хватает.

  • В встроенной системе, в самой безе данных, есть дополнительное поле которое хранит информацию о том была ли отправлена запись. Ну и если нет то отправлять.

Склоняюсь к второму варианту, т.к. не нужно делать дополнительные запросы. Буду рад альтернативным версиям и замечаниям, т.к. подобное проектирую в первый раз.

Answer 1

Предлагаю ввести некий постоянно растущий id транзакции (или использовать время с точностью до миллисекунд). Во время добавления/модификации какой либо записи на клиенте писать в нее этот id. Во время сеанса связи с сервером отправлять данные в порядке этих id. В ответ, при получении информации и успешной записи, сервер сообщает id последней обработанной записи. Этот id записывать где нибудь на клиенте. При следующем сеансе связи клиент начинает передавать данные начиная с сохраненного id.

В протоколе общения так же можно предусмотреть запрос последнего id с сервера, на случай, если клиент его по какой то причине потерял. Так же может оказаться полезной (на случай восстановления после сбоев или отладки) возможность при любом запросе к серверу, в ответ прислать информацию, заставляющую клиент сбросить текущий id на более раннюю позицию и присылать данные, начиная с него.

READ ALSO
О нотация, разбор определения

О нотация, разбор определения

Читаю Седживка, до этого момента было все понятно:

138
ConcurrentModificationException

ConcurrentModificationException

Здравствуйте, постоянно получаю ошибку, когда пытаюсь добавить объекты на картуГугл мне не дал ясности, стек оверфлоу я тоже, не понял, что...

204
Как сделать inline-кнопку Telegram Bot API с новой строки в Java?

Как сделать inline-кнопку Telegram Bot API с новой строки в Java?

Как сделать inline-кнопку Telegram API с новой строки в Java?

276
Как сделать Json отображение через Simple JSON

Как сделать Json отображение через Simple JSON

Что сделать, чтобы показывал строку в этом коде?

242