У меня есть приложение, которое позволяет пользователям входить в аккаунт Google.Пользователь может войти в систему с одной учетной записью на нескольких устройствах Android одновременно.Приложение на этих устройствах поддерживает локальную базу данных, которая должна периодически синхронизироваться.Эти устройства могут добавлять, удалять или обновлять записи одновременно.
- Данные будут сохраняться на Google Диске пользователя.
- Данные, которые должны бытьсинхронизируется просто (очень похоже на пары ключ-значение без отношений)
- В случае конфликтов update преобладает самое последнее update .
- Инкрементные обновления предпочтительны, но не являются обязательными.
- Предположение - каждая запись занимает около 150 байт, максимальное количество записей на устройство равно 1000, а максимальное нет.количество зарегистрированных устройств на пользователя равно 3. Таким образом, максимальный объем синхронизируемых данных составляет ~ 500 КБ.
Я не хочу размещать реальный сервер.Поскольку приложение бесплатное и число пользователей очень велико, я не могу использовать платные решения (например, Firebase и т. Д.).Кроме того, я использую SyncAdapter для синхронизации (если это помогает).
Мои вопросы:
- Какая логика / алгоритм для его реализации?(что также касается конфликтов)
- Есть ли лучший способ, кроме хранения файлов на Google Диске для целей синхронизации?
Что я думал до сих пор:
- Я сохраню файл JSON в хранилище диска пользователя, представляющий всю базу данных.
- В локальной базе данных, когда записи удаляются пользователем, вместо удаления записей я устанавливаю значение
deleted_at
столбец как текущая метка времени. - В локальной базе данных, когда записи добавляются / обновляются / удаляются, я обновляю столбец
updated_at
как текущую метку времени. - Синхронизация будет выполняться следующим образом:
- Извлечение файла с диска.
- Для каждой записи: Если значение
updated_at
из файла диска является более новым, обновите запись в локальной базе данных.Если updated_at
значение локальной базы данных более новое, обновите запись в файле JSON. - Добавьте все записи, которые существуют в файле, но отсутствуют в локальной базе данных и наоборот.
- Загрузка и перезаписьфайл JSON на диск.
Пожалуйста, предложите лучшие способы и с какими проблемами я столкнусь при таком подходе.