我有一个允许用户使用Google帐户登录的应用。一个用户可以同时使用多个Android设备上的同一帐户登录。这些设备上的应用程序维护一个本地数据库,该数据库需要定期同步。这些设备可以同时添加或删除或更新这些条目。
- 数据将存储在用户的Google云端硬盘中。
- 需要同步的数据很简单(很像没有关系的键值对)
- 如果发生更新冲突,则以最近的更新为准。
- 最好是进行增量更新,尽管不是强制性的。
- 假设-每个条目大约需要150个字节,每个设备的最大条目数为1000,最大数量为1000。每个用户登录的设备总数为3。因此,同步的最大数据量约为500 KB。
我不想托管实际的服务器。由于该应用程序是免费的,并且用户数量很大,因此我无法寻求付费解决方案(例如Firebase等)。
此外,我正在使用SyncAdapter进行同步(如果有帮助的话)。
我的问题是:
- 实现它的逻辑/算法是什么? (也可以解决冲突)
- 除了将文件存储在Google云端硬盘中以进行同步之外,还有其他更好的方法吗?
到目前为止我一直在想:
- 我将一个JSON文件保存在用户的驱动器存储中,代表整个数据库。
- 在本地数据库上,当用户删除条目时,我将
deleted_at
列的值设置为当前时间戳,而不是删除条目。
- 在本地数据库上,添加/更新/删除条目时,我将
updated_at
列更新为当前时间戳。
- 同步将如下进行:
- 从云端硬盘中获取文件。
- 对于每个记录:如果来自Drive文件的
updated_at
值是较新的,则更新本地数据库中的记录。如果本地数据库的updated_at
值是较新的,则更新JSON文件中的记录。
- 添加“文件”中存在的所有记录,但不添加本地数据库中的所有记录,反之亦然。
- 将JSON文件上传并覆盖到云端硬盘。
请提出更好的方法,这种方法会遇到什么问题。