<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    移動端與服務器端數據庫同步

     最近在寫一個移動工具類應用。需要支持離線功能,所以本地需要一份數據庫的拷貝,這樣就涉及到移動端和服務器端數據庫的同步問題。
      在設計時我要滿足以下幾個需求:
      1. 同步時雙向傳輸數據最小化。雙向即,服務器端更新同步到移動端,和移動端更新同步到服務器。每次只傳輸兩端差異數據。
      2. 支持離線。支持離線本身是一種好的用戶體驗,而它帶來的一個其他的好處是每次移動端數據庫查詢僅需查詢本地數據庫,這樣就避免了過多的服務器端查詢。本地數據庫減少了很多服務器的壓力,當然也給用戶省了流量。數據庫更新操作也是如此,僅更新本地數據庫,然后在適當的時機與服務器端進行同步。更進一步的說,移動端查詢和更新數據只跟本地數據庫打交道。
      3. 沖突解決。如果一個用戶帳號在多個移動端進行離線使用,勢必會產生數據沖突。
      設計的關鍵在于數據模型的設計,和同步算法。以下是我的想法。
      下面是對象類代碼,對應數據庫的表字段。
      服務器端設計:
    public abstract class ServerBaseModel {
    public long userId; /* Global unique user id */
    public long id; /* Model id. Unique for user */
    public long lastmodified; /* Last modified server time stamp */
    public boolean deleted; /* delete flag */
    }
      移動端設計:
    public abstract class ClientBaseModel {
    public long userId; <span style="font-family: Arial, Helvetica, sans-serif;">/* Global unique user id */</span>
    public long id; /* Model id. Unique for user */
    public long lastmodified; /* Last modified server time stamp */
    public boolean deleted; /* delete flag */
    public boolean dirty; /* Local dirty flag */
    }
      分析:
      首先是如何選擇表的主鍵id
      1. 使用auto increment主鍵?不行!根據前面支持離線的需求,id應該在移動端就已經生成。如果使用auto increment在同一個用戶帳號的情況下只可以做到單個移動端的唯一性,無法保證多個移動端的唯一性,更加不能保證服務器端全局的唯一性。
      2. 使用UUID作為主鍵?可行!每一條數據在移動端創建時即為之生成UUID。這樣基本可以保證服務器端全局的唯一性。對于使用UUID作為主鍵好不好的討論很多,大家可以另行參考。
      3. 我的方案。使用userId和一個用戶唯一的model id作為聯合主鍵。model id需要保證在同一userId下唯一,這樣再加上userId使得數據全局唯一。問題是如何選擇model id?一個比較可行但是不能保證完全沒有重復的是時間戳。
      4. 還有其他更好的主鍵方案嗎?
      接下來是如何判斷服務器端數據已經更新
      每一條數據存儲一個last modified時間戳。這個時間戳是服務器端的時間。同一條數據如果移動端的lastmodified小于服務器端的lastmodified就可以判斷數據已經更新。
      移動端數據更新
      移動端數據庫增加一個dirty標志,dirty標志表示本地新增或者修改的數據,這些數據會在下一次同步時上傳至服務器。
      如何處理數據刪除
      根據前面last modified和dirty字段的設計,整個數據模型是一個增量式的。數據只允許新增和更新,所以這里增加一個deleted標志表示數據是否已經被刪除。
      以上介紹完我的移動端和服務器端數據庫同步的數據模型設計,接下來講講詳細同步算法。
      不過。。。等等。。。公司年會的節奏,等有時間繼續寫。
      同步算法:
      1. 服務器端向移動端同步
      2. 移動端向服務器端同步
      android帳號驗證框架

    posted on 2014-01-27 10:50 順其自然EVO 閱讀(3351) 評論(3)  編輯  收藏 所屬分類: android

    評論

    # re: 移動端與服務器端數據庫同步 2014-04-15 15:19 于老大

    好文,期待算法  回復  更多評論   

    # re: 移動端與服務器端數據庫同步 2016-08-10 08:13 ののswd

    dwd  回復  更多評論   

    # re: 移動端與服務器端數據庫同步 2016-08-10 08:15 大太陽

    這個到底是怎么弄呢?期待更詳細的內容  回復  更多評論   

    <2014年1月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费观看男人吊女人视频| 一个人看的www在线免费视频| 久久久久久久99精品免费| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 亚洲AV福利天堂一区二区三| 99久久免费国产特黄| 亚洲精品无码乱码成人| 成人毛片100免费观看| 美女啪啪网站又黄又免费| 精品久久洲久久久久护士免费| 亚洲精品美女久久7777777| 在线观看免费毛片| 亚洲线精品一区二区三区影音先锋| 亚洲国产成人va在线观看网址| 84pao强力永久免费高清| 亚洲美女在线国产| 久久99精品免费一区二区| 国产AV无码专区亚洲A∨毛片| 国产精品无码亚洲精品2021| 亚洲国产精品尤物YW在线观看| eeuss影院www天堂免费| 免费看男女下面日出水视频| 亚洲精品不卡视频| 欧美日韩国产免费一区二区三区| 亚洲av中文无码字幕色不卡 | 亚洲美女在线国产| 日本免费在线中文字幕| 亚洲an日韩专区在线| 免费一级毛片在级播放| 亚洲国产亚洲综合在线尤物| 日本一区二区三区免费高清| 美女黄频a美女大全免费皮| 国产亚洲免费的视频看| 午夜性色一区二区三区免费不卡视频 | 久久不见久久见免费影院www日本| 亚洲第一AAAAA片| 搡女人真爽免费视频大全| 亚洲国产精品免费在线观看| 久热免费在线视频| 亚洲中文精品久久久久久不卡| 一本色道久久综合亚洲精品|