@Neonoviiwolf
Flutter developer

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

Доброго
Задача такая, на сервере есть бд которое отдаёт данные в приложение на android. Дело в том, что добавление новых записей будет частым, так же как и обновление уже существующих. Как бы мне это красиво сделать, дабы каждый раз не отправлять всю бд. Если бы только добавление, я бы отправлял последний id, а в ответ получал чего не хватает, а вот обновление данных ставит в тупик, ведь у каждого пользователя могут быть разные состояния актуальности базы. Как такое решается?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 2
@lazard105
Обычно это делают так:
1) Для каждой таблицы добавляют столбец "UpdateDate" - дата последнего изменения строки.
1.a) При обновлении или добавлении в UpdateDate этой строки на сервере ставится текущая дата.
2) Пользователь в запросе на синхронизацию отдает максимальную дату из всех своих UpdateDate - из локальных (у пользователья UpdateDate не меняется - она устанавливается только при синхронизации).
3) Сервер отдает только те строки, у которых UpdateDate больше чем переданный пользователем.

Если нужно детальное описание с диаграммами то оно тут
Ответ написан
Комментировать
Создайте отдельную таблицу (SYNC): [TIMESTAMP], [UPDATED_ID]
Каждый раз, когда добавляете или изменяете значение в основной базе данных, добавляйте новую запись в SYNC-таблицу.
UPDATED_ID - это id изменённой/добавленной записи в основной базе.
TIMESTAMP - текущее серверное время.
SYNC-базу можно сделать на Redis или аналогичном in-memory хранилище, а не только на SQL.

На клиенте (в приложении) храните время последней синхронизации с сервером (просто long).
лучше, чтобы сервер сам формировал timestamp (текущее серверное время) и отдавал клиенту

Когда клиенту потребуется синхронизироваться, отправляете эту временную метку серверу. На сервере из SYNC таблицы вытаскиваете id всех новых и обновлённых записей после полученной от клиента timestamp. Убираете дубли (они могут быть для обновлённых записей). Осталось только по этим id прочитать данные из основной базы и отправить их клиенту.

Плюсы по сравнению с тем, что уже предложено

- не трогаете свою базу, не вставляете новые колонки
- в приложении просто храните временную метку последней синхронизации
- в приложении для синхронизации не требуется предварительно вычитать и обработать всю локальную базу

PS. и как уже сказали, вы пишите аналог Firebase realtime database. Она делает ровно тоже самое. Можно попробовать поискать как реализовано там.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы