一種用戶端同步server資料的方案

來源:互聯網
上載者:User

標籤:備份   同步   方案   

情境

用戶端A不定時地把本機資料同步到server上,然後另一個用戶端B(app)從server把資料同步下來,匯總展示

用戶端A資料結構

原始的資料(來自用戶端A),每條都有create_time和modify_time,用於表示這條記錄的建立時間和修改時間。同時系統裡還有latest_backup_time欄位,用來表示上次備份的時間。用戶端每次備份,都會以這3個欄位作為條件,找出需要備份的資料,上傳到server

服務端資料結構

由於曆史遺留問題,服務端收到備份資料之後,沒有做其他的處理,而是直接寫入資料庫

用戶端B同步邏輯

用戶端B有latest_sync_time欄位,用於表示最後一次從server同步的時間。這個欄位是每次同步之後,服務端確定並返回的,用戶端把這個時間戳記下來。請求同步時,再帶上這個時間戳記。然後服務端就以create_time,modify_time,latest_sync_time這3個欄位作為條件,找出需要下發的資料,返回用戶端B

查詢哪些資料需要下發的邏輯是:


這個方案的關鍵是,如何確定latest_sync_time。由於create_time和modify_time都是用戶端A的本地時間,服務端也沒有欄位表示服務端入庫的時間,所以服務端返回latest_sync_time到用戶端B的時候,不能用伺服器接收到同步請求的時間,而要用本次查詢到的資料中,最後的create_time或modify_time

其他方案

上面這個方案主要在確定latest_sync_time的時候比較麻煩。根源在於服務端入庫的時候,沒有把入庫的服務端時間儲存下來。如果在服務端有sync_time,那麼比較起來就很容易,只要找到sync_time在latest_sync_time和now之間的資料就可以了。這些資料就是從上次同步到當前時刻的新資料,然後只要把當前的時間,放在響應裡一起返回用戶端,用戶端重新整理latest_sync_time就行了

另外,上面這個方案把判斷insert和update的邏輯也放在了服務端。其實服務端也可以把滿足的資料直接發回用戶端B,然後在用戶端判斷id是否存在,就可以確定該資料是新增的,還是需要update的

這個方案感覺會更簡單,而且由於sync_time是由服務端控制的,也可以避免由於用戶端A修改本地系統時間引起的邏輯錯誤,應該是一個更優的方案。但是由於現在server裡已經存在沒有記錄sync_time的曆史資料,遷移起來比較麻煩,而且這種方案也需要改動server現有的備份邏輯,所以最後還是決定採用第一種方案。新開發的系統,建議採用第二種方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.