Хочу импленментировать синхронизацию баз данных между удаленными машинами. Все происходит так: embedded система собирает данные и при возможности выхода в сеть POST-ит ее на сервер, сервер принимает GET запросы от клиентов, все в одностороннем порядке. Но не могу определиться с способом отправки данных на сервер с встроеной системы. Первое что приходит на ум:
Встроенная система, при возможности подключиться к серверу, делает GET запрос и узнает какой последний id записи там лежит и делает выборку в своей базе всех записей которые были сделаны позже(т.е. имеют больше id) и постит все что не хватает.
В встроенной системе, в самой безе данных, есть дополнительное поле которое хранит информацию о том была ли отправлена запись. Ну и если нет то отправлять.
Склоняюсь к второму варианту, т.к. не нужно делать дополнительные запросы. Буду рад альтернативным версиям и замечаниям, т.к. подобное проектирую в первый раз.
Предлагаю ввести некий постоянно растущий id транзакции (или использовать время с точностью до миллисекунд). Во время добавления/модификации какой либо записи на клиенте писать в нее этот id. Во время сеанса связи с сервером отправлять данные в порядке этих id. В ответ, при получении информации и успешной записи, сервер сообщает id последней обработанной записи. Этот id записывать где нибудь на клиенте. При следующем сеансе связи клиент начинает передавать данные начиная с сохраненного id.
В протоколе общения так же можно предусмотреть запрос последнего id с сервера, на случай, если клиент его по какой то причине потерял. Так же может оказаться полезной (на случай восстановления после сбоев или отладки) возможность при любом запросе к серверу, в ответ прислать информацию, заставляющую клиент сбросить текущий id на более раннюю позицию и присылать данные, начиная с него.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости