小弟我程序员菜鸟,请教各位一个数据同步的问题,APP(采用 flutter)与服务端(nodejs)进行数据同步。
大概就像是 Iphone 的 iCloud 功能,比如拍了一张照片,会穿上到 icloud ,删除照片,也会从 icould 上面删除,换手机后,也能直接同步到新手机。
看起来挺简单的,小弟我一细想就觉得有点复杂,例如没网的时候用户操作了怎么办,或者是网络差,文件上传到一半断网了怎么办...,怕我代码写的不好,莫名其妙把用户的文件从云端误删了...
用户的文件主要是音频文件(10MB 左右) 请问各位知道有现成的成熟库可以直接用吗?或者是给小弟提供一点思路,感激不尽
1
star7th 2023-03-22 09:02:22 +08:00
1 ,记录时间戳,确保哪一个是最新的动作
2 ,完整性校验,校验通过的才是操作完成,其他都是失败。不管是不是上传到一半。 3 ,回收站机制,文件删除先进回收站。 |
5
shellus 2023-03-24 10:19:34 +08:00
1:新增文件 -》 无:创建;有,相同:忽略;有,不同:覆盖
|
6
shellus 2023-03-24 10:26:34 +08:00
客户端视角-》云端视角:
1:新增文件 -》 无:创建;有,相同:忽略;有,不同:覆盖 2:更新文件(上版本 hash+更新内容)-》如果上版本 hash 等于云端现有内容,那么是正常的从 1 到 2 的更新,通过。如果上版本 hash 不等于云端现有内容,说明客户端在此次更新前,对于该文件与云端持有不同版本,那么就要形成冲突差异文件并提示用户选择。 |
7
shellus 2023-03-24 10:33:58 +08:00 1
我们假设有 A 和 B 两个用户,他们对一个现有空白 a.txt 的编辑操作,按照时间顺序是:
A:写入 1 B:写入 2 A:写入 3 B:写入 4 一共 4 次操作,我们假设服务端会在任意时间接收到这 4 次更新(因为客户端离线编辑,联网后上传,所以顺序是不固定的) 我们假设服务器先收到第 4 个操作,那么服务端直接将 4 写入 a.txt 接着,第 3 个操作来了,我们用 3 覆盖掉了 4 就是丢了最新数据,造成了事故 所以,每次要不要更新,就是要带上更新前的 hash ,让各方达成共识,如果第三个的操作描述是:将 2 改成 3 。那么服务端在收到这条信息的时候就会检查现在是不是 2 ,不是 3 的话,“将 2 改成 3” 这个操作就会被拒绝 |