KO增量更新
在app的時(shí)候, 為了用戶體驗(yàn), 一般都會(huì)引入緩存來(lái)加速app的運(yùn)行. 而緩存這東西用的好則是倚天劍, 用的不好, 容易帶進(jìn)臟數(shù)據(jù).
這里來(lái)爆料[[在移動(dòng)環(huán)境中緩存增量更新設(shè)計(jì)思想]]
通訊錄
場(chǎng)景1 : app上沒(méi)有任何緩存記錄.?
場(chǎng)景2 : app上存在緩存記錄, 但是有一段時(shí)間沒(méi)有使用改app, 不能確保緩存為最新.
場(chǎng)景3: ?app正在使用緩存.
在上述三個(gè)場(chǎng)景中, 最麻煩的就是 場(chǎng)景2, 因?yàn)榭赡軙?huì)出現(xiàn) server在app不使用的時(shí)間段對(duì)通訊錄中的信息進(jìn)行了CRUD操作 .
+10多蘭( ChangeLog機(jī)制)
在增量更新中, 最基本的方式, 是采用ChangeLog機(jī)制, 大家可以回想一下SVN的版本機(jī)制, 它把對(duì) 代碼倉(cāng)庫(kù)的每一個(gè)操作都記錄下來(lái) . ?在各個(gè)不同Rev同步代碼時(shí)候, 直接拿著Rev 去獲得變化的版本序列, 然后merge 到本地代碼即可. 舉個(gè)栗子:
服務(wù)器存在以下對(duì)通訊錄的ChangeLog
1) 當(dāng)沒(méi)有緩存手機(jī), 去get 通訊錄的時(shí)候, 那么把最新的 快照(有效的數(shù)據(jù)條目)或者整個(gè)ChangeLog拉下來(lái)就成了.
2)?如果手機(jī)中存在緩存, 如
則直接從獲取T4-T7的ChangeLog記錄, 然后更新緩存即可.
可能大家會(huì)發(fā)現(xiàn)存在“刪除”狀態(tài)的數(shù)據(jù),這些數(shù)據(jù)是表示軟刪除的數(shù)據(jù)。關(guān)于軟/硬刪除,大家可以自行度娘。
+45大劍(精簡(jiǎn)ChangeLog)
上面小節(jié)中, ChangeLog可能會(huì)文件過(guò)長(zhǎng)從而占用大量的磁盤, 如果業(yè)務(wù)中僅僅對(duì)最終結(jié)果有興趣,那我們需要適當(dāng)?shù)那謇硭鼈?
比如說(shuō), 我們清理了 帶* 的ChangeLog條目 , ?如圖:
在App同步緩存的時(shí)候
1) 沒(méi)有緩存, 下載最新的快照
2) ?存在緩存, 則需要根據(jù) 緩存最后更新時(shí)間Tc 來(lái)進(jìn)行決策
A) Tc < T4: 如Tc 為T1, T2 的時(shí)候, 服務(wù)器無(wú)法進(jìn)行判斷在小于Tc->T4時(shí)間段發(fā)生了神馬事情, 所以只能下載最新的快照
B) Tc>=T4: 則可以下載Tc->T7的ChangeLog, 來(lái)進(jìn)行更新.
可能會(huì)出現(xiàn)兩種極端的情況:
1)?如果我們手賤, 把整個(gè)ChangeLog都刪掉了 ? 蠻有想法的, 可以參考下一小節(jié)。
2)?如果把快照也刪掉了, 那么去找一個(gè) 修復(fù)磁盤的專業(yè)人員試試看, 順便構(gòu)思一下辭職信的內(nèi)容.
+75無(wú)盡(免除ChangeLog)
在上一小節(jié), 我們精簡(jiǎn)了ChangeLog, 使得可以刪除一部分ChangeLog, 那么是否可以去除整個(gè)ChangeLog,僅僅留下我們感興趣的快照呢? 當(dāng)然是可以的.
比如說(shuō)我們經(jīng)過(guò)以下的修改過(guò)程, 獲得的快照:
在app緩存更新的時(shí)候:
1) app沒(méi)有緩存: download 快照
2) app 有緩存, 且條目最后更新時(shí)間為Tc.
A) Tc < T4 : 下載快照。
B) T4 <= Tc <= T7 : 獲取快照中Tc->T7的條目, 更新緩存。
基本的思想就是快照為ChangeLog最后有效狀態(tài),而我們僅僅需要它。
到此, 我們已經(jīng)獲得+75無(wú)盡的加成了, 但是這還不能carry 全場(chǎng). 我們還需要把焚燒一些被delete的數(shù)據(jù).
先知藥劑(剔除失效時(shí)間過(guò)長(zhǎng)的數(shù)據(jù))
如果數(shù)據(jù)庫(kù)中存在N年前的刪除記錄, 而沒(méi)有把他們刪除掉, 這時(shí)候你就需要一瓶清潔劑, 把這些冗余的數(shù)據(jù)清理掉。清理指南如下:
1. 劃出合適的 時(shí)間線(焚燒線) ,在這個(gè)時(shí)間之前“被標(biāo)記為刪除”的數(shù)據(jù)都將被焚燒掉。
2. 在app同步緩存的時(shí)候, 給定的Tc 在焚燒線或者 最舊快照時(shí)間(上一小節(jié)T4) 之前, 則下載整個(gè)快照. 否則下載Tc->最新緩存.
團(tuán)戰(zhàn)要點(diǎn)
1. 避免過(guò)量焚燒數(shù)據(jù),這會(huì)使得app每次都同步最新的快照。
2. 合理的考慮整個(gè)快照和增量更新的大小對(duì)比。
3. 設(shè)計(jì)好更新的時(shí)機(jī)。
基本原理
確保時(shí)間戳之前的內(nèi)容,更新時(shí)間戳之后的內(nèi)容。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

