最近在写一个移动工具类应用。需要支持离线功能,所以本地需要一份数据库的拷贝,这样就涉及到移动端和服务器端数据库的同步问题。
在设计时我要满足以下几个需求:
1. 同步时双向传输数据最小化。双向即,服务器端更新同步到移动端,和移动端更新同步到服务器。每次只传输两端差异数据。
2. 支持离线。支持离线本身是一种好的用户体验,而它带来的一个其他的好处是每次移动端数据库查询仅需查询本地数据库,这样就避免了过多的服务器端查询。本地数据库减少了很多服务器的压力,当然也给用户省了流量。数据库更新操作也是如此,仅更新本地数据库,然后在适当的时机与服务器端进行同步。更进一步的说,移动端查询和更新数据只跟本地数据库打交道。
3. 冲突解决。如果一个用户帐号在多个移动端进行离线使用,势必会产生数据冲突。
设计的关键在于数据模型的设计,和同步算法。以下是我的想法。
下面是对象类代码,对应数据库的表字段。
服务器端设计:
public abstract class ServerBaseModel {
public long userId; /* Global unique user id */
public long id; /* Model id. Unique for user */
public long lastmodified; /* Last modified server time stamp */
public boolean deleted; /* delete flag */
}
移动端设计:
public

本文探讨了在移动应用中实现离线功能时,如何设计数据库同步策略以满足双向最小化传输、离线支持和冲突解决的需求。通过使用UUID作为主键、last modified时间戳判断更新、dirty标志标记待同步数据以及deleted标志处理删除,实现了数据模型设计。同步算法包括移动端获取服务器更新和服务器接收移动端脏数据的过程。
最低0.47元/天 解锁文章
1650

被折叠的 条评论
为什么被折叠?



