Синхронизация базы данных приложения с Google Drive - алгоритм / логика - PullRequest
1 голос
/ 11 июня 2019

У меня есть приложение, которое позволяет пользователям входить в аккаунт Google.Пользователь может войти в систему с одной учетной записью на нескольких устройствах Android одновременно.Приложение на этих устройствах поддерживает локальную базу данных, которая должна периодически синхронизироваться.Эти устройства могут добавлять, удалять или обновлять записи одновременно.

  1. Данные будут сохраняться на Google Диске пользователя.
  2. Данные, которые должны бытьсинхронизируется просто (очень похоже на пары ключ-значение без отношений)
  3. В случае конфликтов update преобладает самое последнее update .
  4. Инкрементные обновления предпочтительны, но не являются обязательными.
  5. Предположение - каждая запись занимает около 150 байт, максимальное количество записей на устройство равно 1000, а максимальное нет.количество зарегистрированных устройств на пользователя равно 3. Таким образом, максимальный объем синхронизируемых данных составляет ~ 500 КБ.

Я не хочу размещать реальный сервер.Поскольку приложение бесплатное и число пользователей очень велико, я не могу использовать платные решения (например, Firebase и т. Д.).Кроме того, я использую SyncAdapter для синхронизации (если это помогает).

Мои вопросы:

  1. Какая логика / алгоритм для его реализации?(что также касается конфликтов)
  2. Есть ли лучший способ, кроме хранения файлов на Google Диске для целей синхронизации?

Что я думал до сих пор:

  • Я сохраню файл JSON в хранилище диска пользователя, представляющий всю базу данных.
  • В локальной базе данных, когда записи удаляются пользователем, вместо удаления записей я устанавливаю значение deleted_at столбец как текущая метка времени.
  • В локальной базе данных, когда записи добавляются / обновляются / удаляются, я обновляю столбец updated_at как текущую метку времени.
  • Синхронизация будет выполняться следующим образом:
    1. Извлечение файла с диска.
    2. Для каждой записи: Если значение updated_at из файла диска является более новым, обновите запись в локальной базе данных.Если updated_at значение локальной базы данных более новое, обновите запись в файле JSON.
    3. Добавьте все записи, которые существуют в файле, но отсутствуют в локальной базе данных и наоборот.
    4. Загрузка и перезаписьфайл JSON на диск.

Пожалуйста, предложите лучшие способы и с какими проблемами я столкнусь при таком подходе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...