1. 程式人生 > >關於線上線下資料同步的想法(待驗證)

關於線上線下資料同步的想法(待驗證)

前段時間遇到一個問題,就是使用者多裝置登陸管理資料,線上線下同步的問題,這兩天想了想,出了個大概想法,思路如下:

對於每個使用者,線上,線下每個裝置端,各建立一張表,用於記錄資料操作記錄,記錄的欄位如下:

UUID,修改日期,操作型別(刪除/增加),其他資訊

使用者首次註冊,表均為空。

線下操作,增加記錄/刪除記錄時,查看錶內是否有相同UUID的記錄,有便覆蓋,更新日期及操作型別。

這樣每條記錄都只對應一個具體的操作,也就是當前最新的結果。

緊接著還需更新資料庫,即記錄對應的操作。

每次開啟應用時應根據操作記錄表來確認資料庫的正確性。

使用者首次登陸或每次開啟應用,連上網之後,與線上進行同步匹配,就是線上操作。

線上操作,將線下表的內容與線上表比較,以修改時間先後為基準,有一下幾種情況:、

對於相同UUID的記錄:

1.如果線下修改時間晚於線上修改時間,那麼線下記錄覆蓋線上記錄,並對線上資料庫做相應的操作;

2.如果線上修改時間晚於線下修改時間,那麼線上記錄覆蓋線下記錄,並對線下資料庫做相應的操作;

對於不同UUID的記錄(即線上有的記錄線下沒有,反之同理):

1.如若是增加操作,那麼線上記錄新增到線下,並做相應資料庫操作,反之線下記錄新增到線上,做相應操作;

2.如若是刪除操作,那麼線上記錄新增到線下,並做相應資料庫操作,反之線下記錄新增到線上,做相應操作;

測試用例:

1.當操作時線下crash:操作沒有完成,對應的增加/刪除操作也沒有執行,假如是crash在操作記錄前,沒什麼影響;假如是crash在操作記錄後,資料庫操作之前,那麼第二次重啟程式時,會進行記錄的匹配,crash後沒完成的操作繼續完成。

2.當同步時由於網路或者其他原因線上操作失敗:那麼線下記錄並沒有被刪除,程式再次執行時,繼續與線上匹配同步;

3.當同步時線上操作成功,而線下crash,得到結果後線下記錄並沒有修改:軟體再次執行時,繼續與線上匹配同步,由於修改時間和線上一樣,那麼記錄不用覆蓋,線下記錄被刪除

4.當同步時線上操作成功,而線下crash,線下記錄修改成功,資料庫沒有修改成功:程式再次開啟時,根據操作記錄再次操作資料庫。

5.當網路不好線上操作沒完成,線下同時crash,那麼此時都沒有操作

此構思為個人暫時想法,歡迎新增測試用例,歡迎指正!