TO-DO無(wú)后端待辦事項(xiàng)應(yīng)用
一個(gè)無(wú)后端待辦事項(xiàng)應(yīng)用,數(shù)據(jù)用 LeanCloud 進(jìn)行同步。
簡(jiǎn)介
這是一個(gè)無(wú)后端的待辦事項(xiàng)應(yīng)用,數(shù)據(jù)用 LeanCloud 進(jìn)行同步,也是我的第三個(gè) iOS 項(xiàng)目。
做這個(gè)項(xiàng)目的初衷是想比較全面地體現(xiàn)我的前后端水平,該同步算法從整理思路到實(shí)現(xiàn) 95% 的代碼(意為接近穩(wěn)定)花了兩周時(shí)間,除思路外沒有任何代碼可以參考(反正我是沒有找到...
界面設(shè)計(jì)來(lái)源于 DO ,部分素材和界面為本人設(shè)計(jì)。
該項(xiàng)目于 2016-12-29 日第一版開發(fā)完成,之前由于意外收錄可能有些朋友 clone 的是不穩(wěn)定版,還請(qǐng)重新下載一次。
項(xiàng)目演示
測(cè)試服務(wù)器
為了方便大家觀察服務(wù)器的數(shù)據(jù),測(cè)試賬號(hào)已公開,要是有什么情況請(qǐng)通知我,(當(dāng)然萬(wàn)一發(fā)生了類似超額的情況我不一定會(huì)解決),另一方面會(huì)這樣做的主要原因是自己搭建的話可能比較麻煩。
注:從 2016 年 12 月 31 日起,該項(xiàng)目中的所有的第三方 API Key 已經(jīng)換成測(cè)試賬號(hào)中的新秘鑰,且之前的 API Key 都被棄用。
LeanCloud 賬號(hào)
todotest
Abcd123!@#
七牛賬號(hào)(存放頭像)
Abcd123!@#
高德
高德 Key 要 BundleID,請(qǐng)各位自行配置,不用地圖也一樣。
同步算法、思路等
如果你對(duì)這個(gè)感興趣的話,請(qǐng)查看以下內(nèi)容,并對(duì)照相應(yīng)代碼進(jìn)行理解。
相關(guān)代碼位于 SGSyncManager.m 和配置于 LeanCloud 云函數(shù)中的 nodejs 代碼。
思路來(lái)源
該同步思路來(lái)源于以下兩篇回答,并根據(jù)項(xiàng)目需求總結(jié)而來(lái)。
服務(wù)端和各種客戶端(手機(jī)端,平板端,web端)怎樣進(jìn)行數(shù)據(jù)同步?
同步方式
每一批次兩個(gè)并行隊(duì)列,每次最多同步X條數(shù)據(jù),超過(guò)X條下次進(jìn)行同步。
每批同步分上傳和下載(與隊(duì)列不對(duì)應(yīng)),若上傳或下載數(shù)超過(guò)上限,則下一批次同步。
同步類型
-
若本地沒有同步記錄,則將本地所有數(shù)據(jù)進(jìn)行上傳,并將服務(wù)器上所有的數(shù)據(jù)進(jìn)行下載(Incremental Sync)
-
若
lastSyncTimeOnServer = lastSyncTimeOnClient,表明服務(wù)器數(shù)據(jù)沒有變化,則僅需要上傳本地修改過(guò)的數(shù)據(jù)和新增的數(shù)據(jù)(Send Changes) -
若
lastSyncTimeOnServer > lastSyncTimeOnClient,則進(jìn)行全量同步,先對(duì)比同步所有已有數(shù)據(jù),再將其他數(shù)據(jù)從服務(wù)器上下載(Full Sync) -
其他情況進(jìn)行(Incremental Sync)
注意事項(xiàng)
-
所有同步時(shí)間戳均以服務(wù)器時(shí)間為準(zhǔn),每次同步之前先獲取服務(wù)器的時(shí)間戳
-
對(duì)比同步規(guī)則:1.大版本同步小版本 2.版本相同的話,以線上數(shù)據(jù)為準(zhǔn)進(jìn)行覆蓋(另一種做法是建立沖突副本,根據(jù)本項(xiàng)目的實(shí)際情況不采用這種方式)
異常情況
以下幾種情況會(huì)影響同步時(shí)數(shù)據(jù)的原子性:
-
云函數(shù)返回之前掛掉:下次同步則為full sync,同時(shí)在對(duì)比時(shí)會(huì)將objectId賦值給本地對(duì)應(yīng)的待辦事項(xiàng)。
-
若在批次之間掛掉的話(上一批成功,下一批掛掉),這時(shí)需要在判斷同步類型時(shí),判斷上一次同步成功的記錄次數(shù),若次數(shù)超限,此次同步為full sync。
同步難點(diǎn)
-
處理各種異常情況,保證數(shù)據(jù)的一致性和原子性
-
同步效率
-
分批同步
同步流程
同步穩(wěn)定性
從我大致寫好同步功能(2016-6-20)到今天(2016-12-30)一共產(chǎn)生了 3300 條同步記錄,暫時(shí)沒有發(fā)現(xiàn)數(shù)據(jù)錯(cuò)誤的地方,如果各位發(fā)現(xiàn)這方面有什么問(wèn)題和 Bug 請(qǐng)一定提交 issue,非常感謝。
同步記錄截圖:
