请教一个数据同步的方案。

2023-03-21 21:27:06 +08:00
 thinkm

小弟我程序员菜鸟,请教各位一个数据同步的问题,APP(采用 flutter)与服务端(nodejs)进行数据同步。

大概就像是 Iphone 的 iCloud 功能,比如拍了一张照片,会穿上到 icloud ,删除照片,也会从 icould 上面删除,换手机后,也能直接同步到新手机。

看起来挺简单的,小弟我一细想就觉得有点复杂,例如没网的时候用户操作了怎么办,或者是网络差,文件上传到一半断网了怎么办...,怕我代码写的不好,莫名其妙把用户的文件从云端误删了...

用户的文件主要是音频文件(10MB 左右) 请问各位知道有现成的成熟库可以直接用吗?或者是给小弟提供一点思路,感激不尽

1036 次点击
所在节点    程序员
7 条回复
star7th
2023-03-22 09:02:22 +08:00
1 ,记录时间戳,确保哪一个是最新的动作
2 ,完整性校验,校验通过的才是操作完成,其他都是失败。不管是不是上传到一半。
3 ,回收站机制,文件删除先进回收站。
thinkm
2023-03-22 09:55:55 +08:00
@star7th 谢谢老哥,有一个疑问,记录时间戳是针对动作还是文件?
star7th
2023-03-22 09:56:51 +08:00
@thinkm 肯定都要记录。然后自己根据实际情况比较。
thinkm
2023-03-22 09:58:53 +08:00
@star7th 还是老哥靠谱啊,问了 chatgpt 给不出具体的代码
shellus
2023-03-24 10:19:34 +08:00
1:新增文件 -》 无:创建;有,相同:忽略;有,不同:覆盖
shellus
2023-03-24 10:26:34 +08:00
客户端视角-》云端视角:
1:新增文件 -》 无:创建;有,相同:忽略;有,不同:覆盖
2:更新文件(上版本 hash+更新内容)-》如果上版本 hash 等于云端现有内容,那么是正常的从 1 到 2 的更新,通过。如果上版本 hash 不等于云端现有内容,说明客户端在此次更新前,对于该文件与云端持有不同版本,那么就要形成冲突差异文件并提示用户选择。
shellus
2023-03-24 10:33:58 +08:00
我们假设有 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” 这个操作就会被拒绝

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/925982

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX