数据同步方案

 

一、数据库表设计

1、客户端表设计

每条记录包含两个用来同步用的字段: 

status : 用来标识记录的状态

anchor : 记录服务端同步过来的时间戳

status 含义

0 本地新增

-1 标记删除

1 本地更新

9 已同步

 

2、服务端表设计

每条记录包含一个用来同步用的字段:

modified : 服务端修改记录的时间戳

 

二、同步方案

1、服务器下行同步方案

 

服务器新增数据同步到客户端

服务器删除数据(级联删除)同步到客户端

服务器更新数据,如果客户端未更新,则客户端数据同步,如果客户端更新,则不更新数据

 

2、服务器上行同步方案

 

客户端新增数据同步到服务器

客户端删除数据(级联删除)同步到服务端

客户端更新数据同步到服务端

 

三、同步算法

1、客户端请求最新数据,客户端取每张表中status==9的记录里面最新的数据,

参数数组

{

{

表名:

时间戳:

}

}

 

2、服务端响应数据,服务端查询时间戳大于每个表的时间戳的记录,将该记录返回,每个表返回一个集合,表顺序是主表在前,附表在后;表内记录顺序按时间戳升序排列!!

{

表名:表数据集合

}

 

3、客户端得到数据后,记录为新增则插入数据,记录为删除则删除数据,记录为更新判断客户端是否修改,如修改则部做任何操作,如未修改则改为服务器数据。,并将时间戳更新服务器时间戳,status更改为9

 

 

4、客户端将所有上传数据更新到服务端

{

表名:{}

}

 

5、服务端收到上传数据后,根据增删改状态更新服务器数据库,并将这些数据时间戳返回客户端

{

表名:{服务端id,时间戳,客户端id}

}

 

 

6、客户端收到数据后,根据id将时间戳插入数据库,,并将status更改为9。

 

四、服务端更新

修改时,插入时间戳,删除时,设置删除标识

 

五、客户端更新

修改时,将status更新下

更新时,只有当status=9 才修改status的值

 

 

六、图片同步过程

客户端定义图片表,包括图片id、图片路径、上传或者下载标识、图片状态。

 

服务器更新数据涉及图片的,将图片路径、图片id插入图片表,图片标识设置为下载。图片状态为待下载。

 

客户端更新数据涉及图片的,将图片路径、图片ID插入图片表,图片标识设置为上传。图片状态为待上传。

 

待数据更新完成后,查询图片表,上传待上传图片,下载待下载图片。

 

 

 

 

 

附:数据接口

1、客户端请求最新数据,客户端取每张表中status!=9的记录里面最新的数据,

参数数组

{

{

表名:

时间戳:

}

}

 

请求数据

POST 接口地址

相关数据库表:

 

参数

public class par{
    string tableName ;

long timestame;
}

public class parResponse{

list<par> parList;

}

正确返回值

{

"meta": {

"success": true,

"message": "ok"

},

"data": $data

}

Data说明

Public class getDataRequest{

List<requestData> dataList;

}

public class requestData{
    string tableName ;

list<string> dataList;
}

 

 

2、服务端响应数据,服务端查询时间戳大于每个表的时间戳的记录,将该记录返回,每个表返回一个集合,表顺序是主表在前,附表在后;表内记录顺序按时间戳升序排列!!

{

表名:表数据集合

}

 

3、客户端得到数据后,记录为新增则插入数据,记录为删除则删除数据,记录为更新判断客户端是否修改,如修改则部做任何操作,如未修改则改为服务器数据。,并将时间戳更新服务器时间戳,status更改为9

 

 

4、客户端将所有上传数据更新到服务端

{

表名:{}

}

 

5、服务端收到上传数据后,根据增删改状态更新服务器数据库,并将这些数据时间戳返回客户端,并将status更改为9

{

表名:{服务端id,时间戳,客户端id}

}

上传数据

POST 接口地址

相关数据库表:

 

参数

Public class uploadDataResponse{

List<requestData> dataList;

}

public class responseData{
    string tableName ;

list<string> dataList;
}

正确返回值

{

"meta": {

"success": true,

"message": "ok"

},

"data": $data

}

Data说明

Public class getDataRequest{

List<requestData> dataList;

}

public class requestData{
    string tableName ;

list< parData > dataList;
}

 

public class parData{

string serverId;

long timestamp;

string clientId;

}

6、客户端收到数据后,根据id将时间戳插入数据库。

 

posted @ 2017-12-23 18:36  你怪哉  阅读(4459)  评论(2编辑  收藏  举报