Алгоритм синхронизации баз данных
Ребят, помогите, пожалуйста с алгоритмом синхронизации данных. Не могу придумать логику работы синхронизации. Все, пути, которые я вижу имеют какие-то коллизии, которые я не могу самостоятельно решить.
Имеется: БД на мобильном приложении (клиент) (SqLite)-> одна таблица "tasks" хранит 4 поля "id", "nameTask", "ServerID", "Version" БД в программе для Windows (клиент) (SqLite) -> одна таблица "tasks" хранит 4 поля "id", "nameTask", "ServerID", "Version" БД на сервере (MySQL)-> одна таблица "tasks" хранит 3 поля "id", "nameTask", "Version"
Если я добавил с клиента мобилы новую строку и она получила на сервере ID, что как мне сказать клиенту, что у тебя имеется строка на локальной БД, которую я внес по твоему запросу в БД сервера под таким-то ID, вот получи его и запиши у себя. Как локальной БД понять, что именно этот ServerID относится к определенной строке. Можно, конечно, связать их по типу LocalID-ServerID, но у меня имеется прога для работы под Винду, у которой тоже имеется БД, и на ней ее LocalID будет возможно другой. + я могу сменить телефон, и заново установить приложение, тогда на локальной БД телефона все ID пойдут с 1.
Вопросов на самом деле очень много, начиная от изменений, заканчивая флагами удаления строк, поэтому и прошу подсказать, по какой подробной логике в настоящее время делают синхронизацию данных в аналогичных случаях.
Заранее большое спасибо!
Ответы (1 шт):
Можно делать распределенное состояние на основе лога событий:
В базах данных повсемесно используется redo-лог. Принцип тот же, только в одной системе первична будет таблица, а в другой лог. И таблицы будут как materialized view от лога.