Android客户端与服务器端数据库同步
来源:互联网 发布:传奇数据库编辑器wzl 编辑:程序博客网 时间:2024/05/01 13:23
应用场景
假设我们在做一个通讯录软件,我们可以在多个客户端对服务端的数据进行增删改。那么这篇文章中我们要解决的问题是如何在客户端与服务端只传输经过增删改操作的数据,来使得客户端与服务端的数据是同步的。
名词解释
Anchor:同步锚点,用时间戳来表示,用来发现两端数据变化的部分
客户端表设计
每条记录包含两个用来同步用的字段:
status : 用来标识记录的状态
anchor : 记录服务端同步过来的时间戳
服务端表设计
modified : 服务端修改记录的时间戳
双向同步过程
初始状态下,我们假设客户端和服务端的表各有两条数据
客户端:
服务端:
此时,客户端与服务端的数据是完全同步好了的
Client增加1条记录
Client修改1条记录
注:因为上面的数据不是从服务端同步过来的,所以anchor默认为0
Client发送本地更新
- 1
客户端执行上面的SQL语句,找出客户端需要同步到服务端的记录。通过网络串行的发送给服务端。上一条请求没有得到回应的话,就不能进行下一个请求。
下表中的数据是发送的同步消息
Server处理同步消息
服务端串行的收到客户端发送过来的数据,首先处理第一条数据
服务端收到请求后需要对比客户端的anchor和服务端的modified,只有服务端modified=客户端anchor才能继续同步,否则说明客户端在上一次同步后服务端更新过数据,需要解决冲突后才能继续,接着根据status的值为1,那么服务端执行UPDATE语句
- 1
其次,处理第二条数据
如果得知anchor = 0,直接执行INSERT 语句
- 1
服务端经过这两次操作后,数据表如下
Client根据响应更新本地记录
服务端处理完数据后,还要响应客户端的请求,如下
收到响应后,客户端就开始执行UPDATE了
- 1
客户端现在的数据表如下:
Server增加一条数据并更新一条数据
Client向Server请求数据
因为服务端modified字段代表的是时间戳,所以Max(anchor)表示客户端最近一次同步的时间,如果存在服务端modified > Max(anchor),说明服务端需要向客户端同步数据。
服务器端执行下面的SQL语句:
- 1
返回下表中的数据:
Client处理同步消息
客户端根据增量数据更新本地表,处理数据时,只能更新状态为已同步或者不存在的数据
客户端删除记录
逻辑删除记录
客户端发送消息到服务端
根据status < 9,将逻辑删除的记录发送至服务端,服务端收到消息后,将该记录移至deleted_table(相当于时光机,以后可以进行数据的恢复)表中
服务端响应客户端的请求
客户端收到响应
客户端直接进行物理删除
服务端删除记录
如果客户端从服务端获取的增量信息中包含删除记录的消息,则客户端直接进行物理删除
- Android客户端与服务器端数据库同步
- Android客户端与服务器端数据同步
- Android客户端与服务器端数据同步
- Android客户端与服务器端数据同步
- 关于客户端与数据库服务器端的时间同步问题
- 关于客户端与数据库服务器端的时间同步问题
- 同步客户端数据库(SSCE)跟服务器端数据库
- Android 客户端数据和服务器端的同步
- Android客户端与电脑服务器端
- Android客户端与服务器端交换之客户端
- 移动端与服务器端数据库同步
- linux ntpdate客户端与ntpd服务器端设置时间同步
- android 客户端与web服务器端通信
- android客户端与c#服务器端的通信
- Android客户端与服务器端(struts2)通信
- android文件上传客户端与服务器端代码
- MINA框架----------android客户端与服务器端
- Android客户端与服务器端交互方式总结
- js 实现二维码
- 2016多校合练 1002 【A Simple Chess】题解
- C#入门5.10——跳转语句之continue语句
- iOS UIFont
- canvas渐变
- Android客户端与服务器端数据库同步
- A Simple Nim
- 树状数组————2016多校第4场 多校第5场
- 海思sample释义
- HDU | Labyrinth
- DIV在Position:absolute情况下的居中
- Android仿“知乎”隐藏标题栏、回答详情页动画效果
- ZZULIOJ (郑轻) 1898
- table 左右拉伸效果