數據同步方案


 

一、數據庫表設計

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將時間戳插入數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM