本地數據與後臺網絡數據同步問題

今天總結一下這兩天的工作內容吧,項目有一個記錄模塊原來只做了網絡存儲,所有的增刪改查都依賴於網絡,同時還有幾個H5的展示界面,也是在服務器抓取數據,就這樣有些沒有wifi的客戶便開始吐槽了(就是做個記錄自己看,還要用我流量),大概就是這個樣子,下面開始進入正題。

我需要做的:本地要建立數據庫,然後H5要在我這拿數據(這個後續會說到),要抓取服務器的歷史數據,還要考慮到用戶兩個手機切換使用時的同步問題(這是這次重點)。

本地數據庫需要字段(id , net_Id , update_time , state ) // net_id 爲服務器id, state爲數據現在狀態(分爲:0,已上傳,1新添,2已修改,3已刪除)

服務器數據庫需要字段(id , updata_time , state)

首先,id問題,我們選擇的是本地數據庫與服務器數據庫維護兩套不同的id(本地同時要存在本地id與服務器id,服務器數據庫只維護自己id即可),本地的本地id自增(作爲本地數據庫的主鍵),未上傳時本地數據庫的服務器id爲空,上傳後服務器返回服務器id(服務器的id也爲自增)並賦給本條數據。

然後就是同步操作了,第一次同步,此時update_time默認爲0(存儲在sharedpreference中)客戶端需要拉取後臺服務器數據庫中的所有數據,並自動添加本地id(自增),此時將update_time設置爲當前系統時間。之後如果網絡狀態一直良好,則在每次對本地數據庫進行操作之後都對服務器進行操作,其中如果新添數據,則在上傳成功之後接收返回來的服務器id賦給當前數據存入本地。如果用戶的網絡狀態一直不好則所有操作都在本地進行。

客戶端會在每次打開的時候,或者在運行狀態下由無網絡切換到有網絡的狀態時,會觸發同步操作,同步操作分爲抓取沒有網絡這段時間的服務器數據(可能爲用戶用別的手機添加)和上傳這個時間段進行操作過的數據。首先根據update_time抓取數據,並判斷每個的state,若爲3(已刪除),則刪除本地的此條數據,其他則根據服務器id添加或覆蓋本地數據,然後在這個異步請求當中去上傳數據(否則update_time不能同步),上傳所有update_time大於本地sp存儲的time的數據,後臺再去判斷state進行操作,然後依次返回這幾條數據的服務器id供本地存儲。此時將本地sp存儲的時間戳更新爲本地時間。

這樣就完成了同步操作(過程可能有些粗糙,歡迎大家指錯,或給予建議)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章