hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..

Как синхронизировать базу данных между устройстами?

Пишу приложения для создания заметок. Если с технической реализацией приложений у меня проблем нет, то вот с "алгоритмами" очень туго.
Дано:
1) Приложение для Android (на basic4android)
2) Приложение для ПК (Windows, Linux) на PyQt5

Выбрал данные технологии, так как они самые простые и я в них разбираюсь.

Вот как отдаленно я представляю себе работу приложений:
На телефоне я создаю краткие заметки (посетить сайт, посмотреть такой-то фильм, скачать песню, сделать для чего-то приложение и т.д.). Далее прихожу домой, запускаю приложение на ПК, и нажимаю кнопку синхронизации (телефон и пк находится в одной сети). (Пока ещё не решил где будет запускаться сервер - в приложении на ПК, или на телефоне, или там и там - но это пока не важно). Далее появляется окошко с просьбой указать ip-адрес "сервера", или происходит поиск в локальной сети работающих хостов, далее отправляется запросы по адресам с нужным портом и в запросе, например, hello, и если получен нужный ответ, значит сервер. Потом самое интересное - начинается синхронизация. Вот тут то у меня и начинаются проблемы.

Возможные ситуации:
1) На телефоне 2 заметки которых нет на ПК. На ПК есть одна заметка, которой нет на телефоне.
2) На одном устройстве удалена заметка, которая есть на других устройствах, и мне нужно при синхронизации удалить данную заметку.
3) И ещё много ситуаций, о которых я ещё не знаю.

Понятно, для каждого приложения нужно создавать уникальный идентификатор. На этом мои мысли закончились. В общем, как я понял, мне нужно сделать приблизительно то же самое, что и в Chrome для закладок.

В идеале было бы неплохо услышать конкретные алгоритмы синхронизации (возможно с каким либо псевдокодом), или ссылки на статьи. В Google 99% результатов для домохозяек о том, как синхронизировать контакты Android.
  • Вопрос задан
  • 543 просмотра
Решения вопроса 1
fox_12
@fox_12
Расставляю биты, управляю заряженными частицами
Делал подобное для бд с разнородными данными, когда у нас есть некая довольно большая база на клиенте, которую нужно синхронизировать с сервером в условиях когда каждый переданный байт данных - на счету.

Алгоритм примерно следующий:
Ведем отдельную таблицу лога - какие записи были добавлены, какие удалены, какие изменены. Каждая запись лога подвязана к некоему id - номеру версии.
Некий клиент при запросе - отправляет сначала номер своей версии. В ответ вы выдаете записи - все изменения с версии клиента и по текущую. После этого клиент синхронизирует свои данные - удаляет удаленные записи, запрашивает новые и измененные.
После окончания синхронизации - происходит инкрементация текущей версии на сервере, и все изменения в БД будут уже с новой версией.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Мдаааа... Ну ты и жесть ты тут написал. Не хотел бы я этим говном пользоваться.
Синхронизируй по timestamp и статусам и будет тебе счастье
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы