Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持云端保存数据 #18

Open
elvinn opened this issue Oct 28, 2020 · 1 comment
Open

支持云端保存数据 #18

elvinn opened this issue Oct 28, 2020 · 1 comment

Comments

@elvinn
Copy link
Owner

elvinn commented Oct 28, 2020

No description provided.

@elvinn
Copy link
Owner Author

elvinn commented Oct 28, 2020

难点

云端保存数据的难点在于 如何在多台设备都可能编辑数据的情况下,保证数据的一致性?,具体而言分为两个方面:

  • 实时通信的实现
  • 冲突的检测与处理

目标

考虑到本项目是个人的腾讯云 云开发练手项目,所以希望能 以尽可能简单的方式实现功能

方案

1. 数据有更新的及时同步

当用户在设备 A/B 设备上都登录时,若在 B 设备上登录,则希望 A 设备能尽快感知到需要更新数据。

对于这种实时同步需求,常见的两种方案是 轮询WebSocket,这里做个简单对比:

轮询 WebSocket
云组件 云函数 云函数 + API 网关
思路 A/B 端每分钟轮询服务器版本是否有变更 服务器将 B 端的操作实施推送到 A 端
成本

所以选择通过 轮询 的方式实现及时同步,具体细节如下:

  • 服务器记录最新的修改时间
  • 客户端向服务器轮询最新的修改时间,若大于客户端保存的最新修改时间,说明数据有更新
  • 数据有更新时,客户端向服务器查询修改时间在本地最新修改时间和服务器最新修改时间之间的数据进行更新

2. 数据有冲突的处理

若考虑 A 端在断网情况下编辑记录 X,B 端在联网情况下同样编辑记录 X,那么在 A 端恢复网络连接进行数据同步的时候,会存在冲突。

对于上述这种情况,肯定不出错的方案是让用户进行对比选择,不过这样子不仅增加了很多开发成本,也带来用户的使用成本,所以数据有冲突时采用如下的简单方案进行处理:

  • 对于同样 id 的记录 X,当本地和服务端记录不一致时,哪一个最新修改时间大,就以哪一个为准
  • 当采用本地的记录时,将其同步更新到服务端

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant