深圳APP開發(fā)公司(博納網(wǎng)絡(luò))在前面的文章中給我們APP開發(fā)愛好者介紹過“如何高效更新數(shù)據(jù)增量”,APP開發(fā)公司今天本文繼續(xù)就前面文章未完部分繼續(xù)介紹。這里是重點(diǎn)③:在數(shù)據(jù)庫中,update_time為1101~1120的數(shù)據(jù)有4條,但由于分頁的緣故,只獲取了3條(從size和total參數(shù)可以判定),這意味著1101~1120ii段時(shí)間的數(shù)據(jù)沒有獲取完整,App所獲取的最后一條數(shù)據(jù)的update_time是1119,服務(wù)器的數(shù)據(jù)表中剩下的沒有被App獲取的數(shù)據(jù)有兩種情況:
. update_t/neI刊I/i'足1119
. update_t/nekT'1119.
由于沒法判斷屬于哪種情況,如果下次拉數(shù)據(jù)的時(shí)候since大于1119服務(wù)器的數(shù)據(jù)表中id為7的數(shù)據(jù)將不會獲取,那么會造成App中丟失了id為7的數(shù)據(jù)所以針對上次數(shù)據(jù)獲取不完整的情況,下次獲取數(shù)據(jù)時(shí)sincce必須是等于1119,雖然有可能會獲取重復(fù)的數(shù)據(jù)。這里是重點(diǎn)4當(dāng)API的返回?cái)?shù)據(jù)size少于total,為了避免有數(shù)據(jù)丟失,since為上次收到API的返回?cái)?shù)據(jù)的max值:1119,max為現(xiàn)在的時(shí)間點(diǎn):1120。關(guān)于策略重點(diǎn)4請結(jié)合策略重點(diǎn)3一起理解。
當(dāng)App端檢查到size和total值不相等,這意味著服務(wù)端的數(shù)據(jù)沒有獲取完畢,App端應(yīng)該再次發(fā)送請求獲職完整的增量更新數(shù)據(jù)。注意:在“獲取最近微博”類的瀑布流拉取形式中,其實(shí)一般是不需要使用page參數(shù)的,直接拉取全部最新的數(shù)據(jù)就好了,深圳APP開發(fā)公司作者之所以要保留這個(gè)參數(shù),是為了防止在一頁中返回過多數(shù)據(jù)的情況。這時(shí)App端發(fā)送API請求,請求的URL如下:
發(fā)送請求后API的返回?cái)?shù)據(jù)和App存儲的本地?cái)?shù)據(jù)如下:
這里是重點(diǎn)⑤:API中返回id為6的數(shù)據(jù)已經(jīng)在App的本地?cái)?shù)據(jù)存在,對于這條數(shù)據(jù),App端應(yīng)該放棄重復(fù)插入。最后App存儲的本地?cái)?shù)據(jù)如表3-7表示。

APP開發(fā)公司關(guān)于后臺制作整個(gè)增量更新的策略到這里為止已經(jīng)分析完畢。
對于這個(gè)增量更新的策略,請仔細(xì)理解重點(diǎn)①,②,③,④,⑤的分析增量更新的策略還要處理個(gè)刪除數(shù)據(jù)的問題。假設(shè)App后臺的數(shù)據(jù)表要刪除一條數(shù)據(jù).那怎么通知App本地電刪除這一條數(shù)據(jù)呢?深圳APP開發(fā)公司程序員的解決方案是在服務(wù)器的數(shù)據(jù)表中增加個(gè)標(biāo)識is_delete,當(dāng)需要在業(yè)務(wù)邏輯上刪除的時(shí)候.把這條數(shù)據(jù)的is_delete設(shè)為1.同時(shí)更新update_time。當(dāng)App通過增量更新機(jī)制獲取到這條is_delete為l的數(shù)據(jù),就在App本地?cái)?shù)據(jù)中把這一條數(shù)據(jù)刪除。為了避免在App后臺保存太多的數(shù)據(jù),可以在服務(wù)器設(shè)置一個(gè)定時(shí)任務(wù)(關(guān)于定時(shí)任務(wù)請查看APP開公司前面文章關(guān)于定時(shí)任務(wù)”)把那些已經(jīng)標(biāo)識is_delete設(shè)為l的數(shù)據(jù)刪除。
上面的例子中依靠修改時(shí)間的增量更新策略有個(gè)問題:由于更新時(shí)間只精確到秒,產(chǎn)生了大量有相同更新時(shí)間的數(shù)據(jù),造成了③,④,⑤需要處理重復(fù)數(shù)據(jù)的問題,改進(jìn)方法有兩個(gè)。
·使用更少的更新時(shí)間,例如毫秒,這樣就能減少數(shù)據(jù)重復(fù)的機(jī)會。
·使用數(shù)據(jù)行的id作為更新的標(biāo)準(zhǔn),由于id是永不重復(fù)的,更新時(shí)只在數(shù)據(jù)庫上獲取比上次最后收到的id大的數(shù)據(jù),這樣App存儲的本地?cái)?shù)據(jù)就不需要比較數(shù)據(jù)是否重復(fù)。
但是使用了id作為更新的標(biāo)準(zhǔn),在數(shù)據(jù)庫上獲取更新的數(shù)據(jù)電成了個(gè)問題:更新數(shù)據(jù)只更改數(shù)據(jù)的其他內(nèi)容,不會更改數(shù)據(jù)的id值。一個(gè)解決方法是把更新數(shù)據(jù)變成插入條新數(shù)據(jù),在插入的數(shù)據(jù)中設(shè)置屬性“updateld”指向需要更新的數(shù)據(jù),App收到這條數(shù)據(jù)后檢查到這個(gè)屬性就知道其是更新舊數(shù)據(jù),如圖3-10所示。
圖3-10使用id的更新最略
刪除的策略也是和更新數(shù)據(jù)類似的策略:插入條數(shù)據(jù),在插入的數(shù)據(jù)中設(shè)置屬性“deleteld”指向原來的數(shù)據(jù).App收到這條數(shù)據(jù)后檢查到該屬性就知道其是刪除舊數(shù)據(jù),如圖3-11所示。
深圳APP開發(fā)公司對于項(xiàng)目制作后臺如何高效處理增量數(shù)據(jù)更新的經(jīng)驗(yàn)就分享到這里,博納網(wǎng)絡(luò)會在下一期與各位APP開發(fā)愛好者聊聊后臺如何處理圖片的實(shí)際操作經(jīng)驗(yàn)。