本申請涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)同步方法、裝置和系統(tǒng)。
背景技術(shù):
客戶端從服務(wù)端獲取數(shù)據(jù)的過程中,如果數(shù)據(jù)量比較大,會嚴重影響客戶端的執(zhí)行效率。為了解決這個問題,可以把服務(wù)端的數(shù)據(jù)放到客戶端本地,當(dāng)客戶端需要讀取數(shù)據(jù)的時候,可以直接從本地讀取。
數(shù)據(jù)放到了客戶端本地后,會涉及到客戶端的數(shù)據(jù)更新的問題,傳統(tǒng)的更新方式是直接以整體覆蓋更新的方式重新去服務(wù)端整體獲取數(shù)據(jù),然后刪除老數(shù)據(jù),存儲新數(shù)據(jù),這樣在觸發(fā)時機上,通常會采用時間維度或者存儲維度等作為觸發(fā)條件去服務(wù)端更新數(shù)據(jù)。
但是,這種在觸發(fā)時機上整體覆蓋更新的方式,會存在滯后性,并且更新效率差。
技術(shù)實現(xiàn)要素:
本申請旨在至少在一定程度上解決相關(guān)技術(shù)中的技術(shù)問題之一。
為此,本申請的一個目的在于提出一種數(shù)據(jù)同步方法,該方法可以提高數(shù)據(jù)更新的實時性,并提高更新效率。
本申請的另一個目的在于提出一種數(shù)據(jù)同步裝置。
本申請的另一個目的在于提出一種數(shù)據(jù)同步系統(tǒng)。
為達到上述目的,本申請第一方面實施例提出的數(shù)據(jù)同步方法,包括:獲知數(shù)據(jù)發(fā)生變更;在數(shù)據(jù)發(fā)生變更時,生成用于記錄數(shù)據(jù)變更情況的更新日志;將所述更新日志發(fā)送給客戶端,以使所述客戶端根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)。
本申請第一方面實施例提出的數(shù)據(jù)同步方法,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
為達到上述目的,本申請第二方面實施例提出的數(shù)據(jù)同步方法,包括:接收服務(wù)端發(fā)送的更新日志,所述更新日志是所述服務(wù)端在獲知數(shù)據(jù)發(fā)生變更時發(fā)送的;根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)。
本申請第二方面實施例提出的數(shù)據(jù)同步方法,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
為達到上述目的,本申請第三方面實施例提出的數(shù)據(jù)同步裝置,包括:獲知模塊,用于獲知數(shù)據(jù)發(fā)生變更;生成模塊,用于在數(shù)據(jù)發(fā)生變更時,生成用于記錄數(shù)據(jù)變更情況的更新日志;發(fā)送模塊,用于將所述更新日志發(fā)送給客戶端,以使所述客戶端根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)。
本申請第三方面實施例提出的數(shù)據(jù)同步裝置,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
為達到上述目的,本申請第四方面實施例提出的數(shù)據(jù)同步裝置,包括:接收模塊,用于接收服務(wù)端發(fā)送的更新日志,所述更新日志是所述服務(wù)端在獲知數(shù)據(jù)發(fā)生變更時發(fā)送的;更新模塊,用于根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)。
本申請第四方面實施例提出的數(shù)據(jù)同步裝置,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
為達到上述目的,本申請第五方面實施例提出的數(shù)據(jù)同步系統(tǒng),包括:上述兩個方面的裝置。
本申請第五方面實施例提出的數(shù)據(jù)同步系統(tǒng),通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
本申請附加的方面和優(yōu)點將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本申請的實踐了解到。
附圖說明
本申請上述的和/或附加的方面和優(yōu)點從下面結(jié)合附圖對實施例的描述中將變得明顯和容易理解,其中:
圖1是本申請一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖2是本申請實施例中系統(tǒng)結(jié)構(gòu)示意圖;
圖3是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖4是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖5是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖6是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖7是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖8是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖9是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖10是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖11是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖12是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖13是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖14是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖;
圖15是本申請另一實施例提出的數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖;
圖16是本申請另一實施例提出的數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖;
圖17是本申請另一實施例提出的數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖;
圖18是本申請另一實施例提出的數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖;
圖19是本申請另一實施例提出的數(shù)據(jù)同步系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
下面詳細描述本申請的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標(biāo)號表示相同或類似的模塊或具有相同或類似功能的模塊。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本申請,而不能理解為對本申請的限制。相反,本申請的實施例包括落入所附加權(quán)利要求書的精神和內(nèi)涵范圍內(nèi)的所有變化、修改和等同物。
圖1是本申請一實施例提出的數(shù)據(jù)同步方法的流程示意圖,本實施例以服務(wù)端的執(zhí)行流程為例,該方法包括:
S11:獲知數(shù)據(jù)發(fā)生變更。
例如,用戶可以在位于服務(wù)端的業(yè)務(wù)系統(tǒng)中增加、刪除或修改數(shù)據(jù),從而服務(wù)端獲知數(shù)據(jù)發(fā)生變更。業(yè)務(wù)系統(tǒng)例如為位于服務(wù)端的為應(yīng)用程序(APP)內(nèi)的功能項提供數(shù)據(jù)的系統(tǒng),如為購物類APP的收藏夾提供數(shù)據(jù)的系統(tǒng)等。
S12:在數(shù)據(jù)發(fā)生變更時,生成用于記錄數(shù)據(jù)變更情況的更新日志。
參見圖2,服務(wù)端可以具體包括:消息處理中心21,業(yè)務(wù)系統(tǒng)在自身的數(shù)據(jù)發(fā)生變更后,可以將數(shù)據(jù)變更情況通知給消息處理中心,消息處理中心根據(jù)數(shù)據(jù)變更情況按照預(yù)設(shè)格式生成更新日志(updatelog)。另外,在生成更新日志后,消息處理中心可以將更新日志保存在同步消息數(shù)據(jù)庫22內(nèi)。
S13:將所述更新日志發(fā)送給客戶端,以使所述客戶端根據(jù)所述更新日志更新發(fā)生變更 的本地數(shù)據(jù)。
參見圖2,服務(wù)端還可以包括:消息下發(fā)中心23,消息下發(fā)中心23用于從同步消息數(shù)據(jù)庫22中讀取更新日志并發(fā)送給客戶端。
另外,參見圖2,服務(wù)端還可以包括:訂閱關(guān)系數(shù)據(jù)庫24、用戶設(shè)備數(shù)據(jù)庫25、全雙工網(wǎng)絡(luò)通道26和用戶設(shè)備任務(wù)狀態(tài)獲取模塊27和進度游標(biāo)記錄數(shù)據(jù)庫28。訂閱關(guān)系數(shù)據(jù)庫24中保存一條或多條訂閱關(guān)系,訂閱關(guān)系包括:更新日志與用戶、用戶設(shè)備、APP中的一項或多項之間的關(guān)系,以及,用戶、用戶設(shè)備與APP之間的對應(yīng)關(guān)系。用戶設(shè)備數(shù)據(jù)庫25用于保存用戶設(shè)備的連接信息。全雙工網(wǎng)絡(luò)通道26是客戶端與服務(wù)端之間的長連接,可以提供服務(wù)端向客戶端發(fā)送消息以及客戶端向服務(wù)端發(fā)送消息。用戶設(shè)備任務(wù)狀態(tài)獲取模塊27用于獲取每個用戶設(shè)備上的更新日志的處理情況相關(guān)信息,如未處理的更新日志的數(shù)量,每個已處理的更新日志是否處理成功等,之后,將獲取的處理情況相關(guān)信息記錄在進度游標(biāo)記錄數(shù)據(jù)庫28中。
在發(fā)送更新日志時,消息下發(fā)中心23可以根據(jù)訂閱關(guān)系數(shù)據(jù)庫24中保存的訂閱關(guān)系確定作為目的地的用戶設(shè)備,再從用戶設(shè)備數(shù)據(jù)庫25中獲取作為目的地的用戶設(shè)備的連接信息,再確定與該連接信息對應(yīng)的全雙工網(wǎng)絡(luò)通道26,通過該全雙工網(wǎng)絡(luò)通道將更新日志發(fā)送給用戶設(shè)備。另外,用戶設(shè)備可以將根據(jù)更新日志的處理情況再通過全雙工網(wǎng)絡(luò)通道發(fā)送給消息下發(fā)中心,消息下發(fā)中心將其保存在進度游標(biāo)記錄數(shù)據(jù)庫28中。
本實施例中,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
一些實施例中,參見圖3,S13可以具體包括:
S31:獲取同一個用戶對應(yīng)的不同客戶端上的更新日志。
例如,同一個用戶可以在不同的用戶設(shè)備上進行登錄,從而同一個用戶可以對應(yīng)不同的客戶端,同一個用戶對應(yīng)的不同客戶端上的更新日志可以相同或不同。
S32:根據(jù)所述不同客戶端上的更新日志,確定需同步的更新日志,并將需同步的更新日志發(fā)送給對應(yīng)的客戶端,以同步不同客戶端上的更新日志。
例如,同一個用戶在用戶設(shè)備-1和用戶設(shè)備-2上都處于登錄狀態(tài),由于不同用戶設(shè)備的處理進度可能不同,造成不同的用戶設(shè)備上可能具有不同的更新日志。例如,對應(yīng)該同一個用戶,更新日志包括:更新日志-1、更新日志-2和更新日志-3,用戶設(shè)備-1上的更新日志例如包括:更新日志-1和更新日志-2,用戶設(shè)備-2上的更新日志例如為更新日志-3,此時,可以對應(yīng)每個用戶設(shè)備,確定該用戶設(shè)備上需同步的更新日志,需同步的更新日志是指自身用戶設(shè)備上沒有而其他用戶設(shè)備上已有的更新日志,例如,對應(yīng)用戶設(shè)備-1的需 同步的更新日志是更新日志-3,對應(yīng)用戶設(shè)備-2的需同步的更新日志包括更新日志-1和更新日志-2。在對應(yīng)每個用戶設(shè)備確定出相應(yīng)的需同步的更新日志后,可以將需同步的更新日志發(fā)送給相應(yīng)的用戶設(shè)備,例如,將更新日志-3發(fā)送給用戶設(shè)備-1,將更新日志-1和更新日志-2發(fā)送給用戶設(shè)備-2,從而使得用戶設(shè)備-1和用戶設(shè)備-2上的更新日志一致,實現(xiàn)不同用戶設(shè)備間的更新日志的同步??梢岳斫獾氖牵鲜鲆园l(fā)送到用戶設(shè)備為例,在具體實施例時通常是指發(fā)送到用戶設(shè)備上某個APP所對應(yīng)的客戶端。
本實施例中,通過確定需同步的更新日志,并將其發(fā)送給對應(yīng)的客戶端,可以實現(xiàn)多端同步。
一些實施例中,參見圖4,當(dāng)需要發(fā)送給客戶端的更新日志為多條時,S13可以具體包括:
S41:向客戶端發(fā)送一條當(dāng)前的更新日志。
其中,可以將需要發(fā)送的每條更新日志依次作為當(dāng)前的更新日志,例如,首次時,向客戶端發(fā)送第一條更新日志。
S42:接收客戶端發(fā)送的對應(yīng)所述當(dāng)前的更新日志的響應(yīng)消息。
例如,客戶端接收到第一條更新日志后,可以根據(jù)該更新日志進行數(shù)據(jù)更新,并在數(shù)據(jù)更新后向服務(wù)端發(fā)送響應(yīng)消息。
S43:接收到該響應(yīng)消息后,發(fā)送所述當(dāng)前的更新日志的下一條的更新日志。
例如,服務(wù)端接收到客戶端發(fā)送的對應(yīng)第一條更新日志的響應(yīng)消息后,可以向客戶端發(fā)送第二條更新日志。
類似的,服務(wù)端在接收到客戶端發(fā)送的對應(yīng)第二條更新日志的響應(yīng)消息后,再繼續(xù)發(fā)送第三條更新日志,依此處理,直到將需要發(fā)送的多條更新日志發(fā)送給客戶端。
本實施例中,通過接收到客戶端發(fā)送的對應(yīng)前一條更新日志的響應(yīng)消息后再發(fā)送后一條更新日志,可以實現(xiàn)更新日志的序列化發(fā)送。
一些實施例中,參見圖5,當(dāng)需要發(fā)送給客戶端的更新日志為多條時,S13可以具體包括:
S51:同時向客戶端發(fā)送多條更新日志。
例如,服務(wù)端根據(jù)每次能夠發(fā)送的消息數(shù)量值,向客戶端同時發(fā)送相應(yīng)數(shù)量的多條更新日志,直至將需要發(fā)送的多條更新日志都發(fā)送給客戶端。
相應(yīng)的,客戶端也可以向服務(wù)端同時發(fā)送多條與更新日志對應(yīng)的響應(yīng)消息。
本實施例中,通過同時向客戶端發(fā)送多條更新日志,可以提高發(fā)送速度。
一些實施例中,參見圖6,當(dāng)更新日志為多條時,S12之后還可以包括:
S61:獲取多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志。
例如,更新日志中包含業(yè)務(wù)信息,將包含同一個業(yè)務(wù)信息的更新日志確定為同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志。
S62:將所述多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志進行合并處理,得到合并處理后的更新日志。
相應(yīng)的,S13具體包括:
S63:將合并處理后的更新日志發(fā)送給客戶端,或者,在合并處理后確定不再向客戶端發(fā)送更新日志時,不再發(fā)送更新日志。
例如,多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志包括:【消息-ADD】-【消息-MOD V2】-【消息-MOD V3】,含義是:先發(fā)生了一個增加(ADD)行為,又發(fā)生了兩次修改(MOD)行為,分別是先修改為V2,再修改為V3,那么經(jīng)過合并處理后,得到的合并處理后更新日志包括:【消息-ADD】-【消息-MOD V3】,先讓客戶端增加該數(shù)據(jù),然后更新到最新的V3。
又例如,多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志包括:【消息-MOD】-【消息-DEL】,含義是:先發(fā)生了一個MOD行為,然后發(fā)生了一個刪除(DEL)行為,那么合并處理后的更新日志是:【消息-DEL】,含義是:客戶端僅需要發(fā)生刪除行為。
又例如,多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志包括:【消息-ADD】-【消息MOD】-【消息DEL】,含義是:先增加一個數(shù)據(jù),再修改該數(shù)據(jù),最后刪除該數(shù)據(jù)。那么合并處理后的更新日志是空,也就是說客戶端不需要對該數(shù)據(jù)進行處理,因此,此時服務(wù)端不需要向客戶端發(fā)送更新日志。
本實施例中,通過先進行合并處理再發(fā)送合并處理后的更新日志或不發(fā)送更新日志,可以減少下行數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)占用時間,以及減少客戶端不必要的處理過程。
一些實施例中,參見圖7,S13之后還可以包括:
S71:如果沒有接收到所述客戶端對應(yīng)所述更新日志的響應(yīng)消息,則重新發(fā)送所述更新日志。
例如,客戶端在接收到更新日志后,可以在接收到更新日志或根據(jù)更新日志進行數(shù)據(jù)更新后,向服務(wù)端發(fā)送響應(yīng)消息。
如果服務(wù)端在預(yù)設(shè)時間內(nèi)沒有收到該響應(yīng)消息,則可以重新發(fā)送更新日志。
本實施例中,通過服務(wù)端重新發(fā)送更新日志,可以實現(xiàn)服務(wù)端的重試機制,提高下行網(wǎng)絡(luò)傳輸?shù)目煽啃浴?/p>
一些實施例中,參見圖8,S13之后還可以包括:
S81:接收所述客戶端發(fā)送的對應(yīng)所述更新日志的第一響應(yīng)消息。
例如,客戶端在接收到更新日志或根據(jù)更新日志更新數(shù)據(jù)后,向服務(wù)端發(fā)送響應(yīng)消息,為了與服務(wù)端發(fā)送的響應(yīng)消息區(qū)分,此時的響應(yīng)消息可以稱為第一響應(yīng)消息。
S82:向所述客戶端發(fā)送對應(yīng)所述第一響應(yīng)消息的第二響應(yīng)消息,以使所述客戶端在沒有接收到所述第二響應(yīng)消息時,重新發(fā)送所述第一響應(yīng)消息。
例如,服務(wù)端在接收到第一響應(yīng)消息后可以向客戶端發(fā)送對應(yīng)的第二響應(yīng)消息。
如果客戶端沒有收到第二響應(yīng)消息,則可以重新發(fā)送對應(yīng)的第一響應(yīng)消息。
可以理解的是,更新日志、第一響應(yīng)消息和第二響應(yīng)消息中可以包含相同的關(guān)聯(lián)標(biāo)識,以相互對應(yīng)。
本實施例中,通過客戶端重新發(fā)送響應(yīng)消息,可以實現(xiàn)客戶端的重試機制,提高上行網(wǎng)絡(luò)傳輸?shù)目煽啃浴?/p>
一些實施例中,參見圖9,S13之后還包括:
S91:獲取所述客戶端未處理的更新日志的數(shù)量。
例如,在圖2所示的用戶設(shè)備任務(wù)狀態(tài)數(shù)據(jù)庫中可以記錄每個用戶設(shè)備的處理情況,因此,服務(wù)端可以通過在用戶設(shè)備任務(wù)狀態(tài)數(shù)據(jù)庫中進行查詢,獲取每個用戶設(shè)備未處理的更新日志的數(shù)量。
S92:如果所述數(shù)量大于預(yù)設(shè)閾值,則向客戶端發(fā)送過期指令,以使所述客戶端根據(jù)所述過期指令清理本地數(shù)據(jù)并從服務(wù)端重新獲取同步數(shù)據(jù)。
例如,客戶端-1的未處理的更新日志的數(shù)量大于預(yù)設(shè)閾值時,服務(wù)端可以向客戶端-1發(fā)送過期指令,客戶端-1接收到該過期指令后,不再根據(jù)更新日志進行數(shù)據(jù)更新,而是以整體覆蓋更新的方式重新從服務(wù)端獲取數(shù)據(jù),以實現(xiàn)客戶端與服務(wù)端的數(shù)據(jù)同步。
本實施例中,通過在客戶端積累大量未處理的更新日志后,不再根據(jù)更新日志進行數(shù)據(jù)更新,可以避免大量的更新日志耗費較長的客戶端的處理時間,從而降低對客戶端的業(yè)務(wù)使用的影響。
一些實施例中,參見圖10,S13之后,還包括:
S101:當(dāng)所述更新日志中包含的數(shù)據(jù)在客戶端被標(biāo)記為過期時,接收所述客戶端發(fā)送的過期通知消息。
例如,客戶端可以將預(yù)設(shè)時間(如7天)內(nèi)未使用的數(shù)據(jù)標(biāo)記為過期,如果客戶端接收的更新日志中包含過期數(shù)據(jù),則客戶端不再根據(jù)該更新日志進行數(shù)據(jù)更新,并且向服務(wù)端發(fā)送過期通知消息。
服務(wù)端在接收到針對數(shù)據(jù)的過期通知消息后,可以在后續(xù)的預(yù)設(shè)時間內(nèi)不再發(fā)送包含過期數(shù)據(jù)的更新日志。
本實施例中,通過客戶端發(fā)送的針對過期數(shù)據(jù)的過期通知消息,可以提高更新日志的發(fā)送效率,避免發(fā)送無用的更新日志。
圖11是本申請另一實施例提出的數(shù)據(jù)同步方法的流程示意圖,本實施例以客戶端的執(zhí) 行流程為例,該方法包括:
S111:接收服務(wù)端發(fā)送的更新日志,所述更新日志是所述服務(wù)端在獲知數(shù)據(jù)發(fā)生變更時發(fā)送的。
例如,如上述實施例所示,服務(wù)端可以獲知服務(wù)端的數(shù)據(jù)發(fā)生變更,服務(wù)端在獲知數(shù)據(jù)發(fā)生變更時,可以根據(jù)變更情況生成更新日志,之后,服務(wù)端可以將更新日志發(fā)送給客戶端。
S112:根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)。
其中,更新日志中可以包括如下參數(shù):
【commandId】:命令唯一性編號,客戶端用此編號來處理重復(fù)指令等。
【ds】:當(dāng)前數(shù)據(jù)歸屬的業(yè)務(wù)的代碼,每個業(yè)務(wù)數(shù)據(jù)都有唯一性代碼。
【data】:發(fā)生變更的數(shù)據(jù)內(nèi)容。
【version】:發(fā)生變更后的數(shù)據(jù)版本號。
【operate】:數(shù)據(jù)變更類型,包括:增加(ADD)、刪除(DEL)、修改(MOD)。
客戶端根據(jù)上述格式的更新日志更新發(fā)生變更的本地數(shù)據(jù)可以具體包括:
對本地數(shù)據(jù)中的所述更新日志中包括的發(fā)生變更的數(shù)據(jù)內(nèi)容,進行所述更新日志中包括的操作指令對應(yīng)的操作。
例如,操作指令(operate)是增加(【ADD】)時,將發(fā)生變更的數(shù)據(jù)內(nèi)容(【data】)添加到本地數(shù)據(jù)中。
又例如,操作指令(operate)是刪除(【DEL】)時,將發(fā)生變更的數(shù)據(jù)內(nèi)容(【data】)在本地數(shù)據(jù)中刪除。
又例如,操作指令(operate)是刪除(【MOD】)時,將業(yè)務(wù)【ds】對應(yīng)的數(shù)據(jù)修改為發(fā)生變更的數(shù)據(jù)內(nèi)容(【data】),并將數(shù)據(jù)版本修改為【version】指示的版本號。
一些實施例中,參見圖12,在S112之前,該方法還可以包括:
S121:判斷是否需要處理更新日志,若是,執(zhí)行S112,否則執(zhí)行S122。
其中,可以根據(jù)如下項中的一項或多項判斷是否需要處理更新日志:
判斷更新日志是否是重復(fù)指令,當(dāng)是重復(fù)指令時確定不需要處理,否則需要處理。其中,可以根據(jù)commandID判斷是否是重復(fù)指令。
判斷更新日志中包含的數(shù)據(jù)是否被標(biāo)記為過期,當(dāng)被標(biāo)記為過期時確定不需要處理,否則需要處理。其中,客戶端可以將預(yù)設(shè)時間(如7天)內(nèi)未使用的數(shù)據(jù)標(biāo)記為過期,從而可以確定更新日志中包含的數(shù)據(jù)是否被標(biāo)記為過期。
判斷所述更新日志中包含的數(shù)據(jù)的版本是否比本地數(shù)據(jù)的版本新,當(dāng)本地數(shù)據(jù)的版本更新時,不需要處理,否則需要處理。其中,更新日志中包含版本號,并且本地數(shù)據(jù)中也 可以對應(yīng)配置版本號,因此,可以比較兩個版本號,得到判斷結(jié)果。
判斷客戶端當(dāng)前所處的狀態(tài)是否屬于預(yù)設(shè)狀態(tài),如果不屬于預(yù)設(shè)狀態(tài)可以確定不需要處理更新日志,否則需要處理,其中,預(yù)設(shè)狀態(tài)包括:初始化成功、初始化失敗、同步成功或同步失敗。其中,客戶端可以根據(jù)當(dāng)前處理情況更新狀態(tài),客戶端所處的狀態(tài)可以分為:未初始化、初始化成功、初始化失敗、同步成功、同步失敗和數(shù)據(jù)過期。
S122:不處理所述更新日志。
另外,在數(shù)據(jù)過期時,客戶端還可以向服務(wù)端發(fā)送過期通知消息。
另外,在更新日志中的版本信息較舊時,客戶端還可以向服務(wù)端發(fā)送版本錯誤的信息。
本實施例中,通過先進行是否需要處理更新日志的判斷,可以在不需要時不處理更新日志,避免資源浪費。
一些實施例中,參見圖13,該方法還可以包括:
S131:根據(jù)初始化行為或者標(biāo)記行為進行初始化,得到初始化狀態(tài),所述初始化狀態(tài)包括:未初始化、初始化成功或者初始化失敗。
初始化是客戶端進行本地數(shù)據(jù)的初始化。
初始化行為可以包括:APP初始化、數(shù)據(jù)被讀取時、業(yè)務(wù)模塊主動觸發(fā)。
通過上述初始化行為可以實現(xiàn)數(shù)據(jù)的初始化。
另外,初始化也可以是標(biāo)記行為,例如,僅被標(biāo)記為初始化成功,而沒有實際上的初始化行為。
在S122之后,還可以包括:
S132:根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)后,得到同步狀態(tài),所述同步狀態(tài)包括:同步成功或同步失?。?/p>
另外,還可以包括:
S133:根據(jù)數(shù)據(jù)的使用情況,將預(yù)設(shè)時間內(nèi)未使用的數(shù)據(jù)標(biāo)記為過期,得到數(shù)據(jù)過期狀態(tài)。
例如,如果數(shù)據(jù)A在預(yù)設(shè)時間內(nèi)未被讀或?qū)?,則客戶端將其標(biāo)記為過期,之后如果客戶端接收到對A的更新日志后,不處理該更新日志。
本實施例中,通過確定客戶端的狀態(tài),可以有效確定是否處理更新日志。
一些實施例中,參見圖14,該方法還可以包括:
S141:對訂閱了所述更新日志的業(yè)務(wù)方進行回調(diào)通知。
例如,業(yè)務(wù)方-1向客戶端訂閱了ds-1的更新日志,則客戶端接收到ds-1的更新日志后,不僅可以根據(jù)該更新日志進行客戶端本地數(shù)據(jù)的更新,還可以將該更新日志發(fā)送給業(yè)務(wù)方-1,從而業(yè)務(wù)方-1可以根據(jù)該更新日志進行后續(xù)處理,如更新業(yè)務(wù)方內(nèi)部的數(shù)據(jù)。
本實施例中,通過對訂閱了更新日志的業(yè)務(wù)方進行回調(diào)通知,可以方便業(yè)務(wù)方的有效處理。
另外,類似對服務(wù)端的處理,客戶端還可以執(zhí)行如下內(nèi)容:
一些實施例中,所述接收服務(wù)端發(fā)送的更新日志,包括:
接收服務(wù)端發(fā)送的需同步的更新日志,所述需同步的更新日志是所述服務(wù)端根據(jù)不同客戶端上的更新日志確定的。
一些實施例中,當(dāng)需要發(fā)送給客戶端的更新日志為多條時,所述接收服務(wù)端發(fā)送的更新日志,包括:
接收服務(wù)端發(fā)送的一條當(dāng)前的更新日志,以及,向服務(wù)端發(fā)送對應(yīng)所述當(dāng)前的更新日志的響應(yīng)消息,以使所述服務(wù)端在接收到所述響應(yīng)消息后發(fā)送所述當(dāng)前的更新日志的下一條的更新日志;或者,
接收服務(wù)端同時發(fā)送的多條更新日志。
一些實施例中,當(dāng)需要發(fā)送給客戶端的更新日志包括:多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志時,所述接收服務(wù)端發(fā)送的更新日志,包括:
接收服務(wù)端發(fā)送的合并處理后的更新日志,或者,在服務(wù)端合并處理后確定不需要向客戶端發(fā)送更新日志時,不接收服務(wù)端發(fā)送的更新日志,所述合并處理后的更新日志是所述服務(wù)端將所述多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志進行合并處理后得到的。
一些實施例中,還包括:
向所述服務(wù)端發(fā)送對應(yīng)所述更新日志的響應(yīng)消息,以使所述服務(wù)端在沒有接收到所述響應(yīng)消息時重新發(fā)送所述更新日志。
一些實施例中,還包括:
向所述服務(wù)端發(fā)送對應(yīng)所述更新日志的第一響應(yīng)消息,以使所述服務(wù)端在在接收到所述第一響應(yīng)消息后向所述客戶端發(fā)送對應(yīng)所述第一響應(yīng)消息的第二響應(yīng)消息;
如果沒有接收到所述第二響應(yīng)消息,重新向所述服務(wù)端發(fā)送所述第一響應(yīng)消息。
一些實施例中,還包括:
接收所述服務(wù)端發(fā)送的過期指令,所述過期指令是所述服務(wù)端在確定所述客戶端未處理的更新日志的數(shù)量大于預(yù)設(shè)閾值后發(fā)送的;
根據(jù)所述過期指令清理本地數(shù)據(jù),并從服務(wù)端重新獲取同步數(shù)據(jù)。
具體內(nèi)容可以參照服務(wù)端的相關(guān)描述,在此不再贅述。
通過上述方式可以提高更新日志的準確性和高效性。
圖15是本申請另一實施例提出的數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖,該裝置位于服務(wù)端,該裝置150包括:獲知模塊151、生成模塊152和發(fā)送模塊153。
獲知模塊151,用于獲知數(shù)據(jù)發(fā)生變更;
生成模塊152,用于在數(shù)據(jù)發(fā)生變更時,生成用于記錄數(shù)據(jù)變更情況的更新日志;
發(fā)送模塊153,用于將所述更新日志發(fā)送給客戶端,以使所述客戶端根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)。
一些實施例中,發(fā)送模塊153具體用于:
獲取同一個用戶對應(yīng)的不同客戶端上的更新日志;
根據(jù)所述不同客戶端上的更新日志,確定需同步的更新日志,并將需同步的更新日志發(fā)送給對應(yīng)的客戶端,以同步不同客戶端上的更新日志。
一些實施例中,當(dāng)需要發(fā)送給客戶端的更新日志為多條時,發(fā)送模塊153具體用于:
向客戶端發(fā)送一條當(dāng)前的更新日志,并在接收到客戶端發(fā)送的對應(yīng)所述當(dāng)前的更新日志的響應(yīng)消息后,發(fā)送所述當(dāng)前的更新日志的下一條的更新日志;
或者,
同時向客戶端發(fā)送多條更新日志。
一些實施例中,當(dāng)需要發(fā)送給客戶端的更新日志包括:多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志時,參見圖16,該裝置還包括:
合并模塊154,用于將所述多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志進行合并處理,得到合并處理后的更新日志;
發(fā)送模塊153具體用于:將合并處理后的更新日志發(fā)送給客戶端,或者,在合并處理后確定不再向客戶端發(fā)送更新日志時,不再發(fā)送更新日志。
一些實施例中,發(fā)送模塊153還用于:如果沒有接收到所述客戶端對應(yīng)所述更新日志的響應(yīng)消息,則重新發(fā)送所述更新日志。
一些實施例中,參見圖16,該裝置還包括:
接收模塊155,用于接收所述客戶端發(fā)送的對應(yīng)所述更新日志的第一響應(yīng)消息;
所述發(fā)送模塊153還用于:向所述客戶端發(fā)送對應(yīng)所述第一響應(yīng)消息的第二響應(yīng)消息,以使所述客戶端在沒有接收到所述第二響應(yīng)消息時,重新發(fā)送所述第一響應(yīng)消息。
一些實施例中,參見圖16,該裝置還包括:
獲取模塊156,用于獲取所述客戶端未處理的更新日志的數(shù)量;
所述發(fā)送模塊153還用于:如果所述數(shù)量大于預(yù)設(shè)閾值,則向客戶端發(fā)送過期指令,以使所述客戶端根據(jù)所述過期指令清理本地數(shù)據(jù)并從服務(wù)端重新獲取同步數(shù)據(jù)。
一些實施例中,接收模塊155還用于:當(dāng)所述更新日志中包含的數(shù)據(jù)在客戶端被標(biāo)記為過期時,接收所述客戶端發(fā)送的過期通知消息。
上述模塊的具體內(nèi)容可以參見上述方法實施例中的相關(guān)描述。
本實施例中,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
圖17是本申請另一實施例提出的數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖,該裝置位于客戶端,該裝置170包括:接收模塊171和更新模塊172。
接收模塊171,用于接收服務(wù)端發(fā)送的更新日志,所述更新日志是所述服務(wù)端在獲知數(shù)據(jù)發(fā)生變更時發(fā)送的;
更新模塊172,用于根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)。
一些實施例中,所述接收模塊171具體用于:
接收服務(wù)端發(fā)送的需同步的更新日志,所述需同步的更新日志是所述服務(wù)端根據(jù)不同客戶端上的更新日志確定的。
一些實施例中,當(dāng)需要發(fā)送給客戶端的更新日志為多條時,所述接收模塊171具體用于:
接收服務(wù)端發(fā)送的一條當(dāng)前的更新日志,以及,向服務(wù)端發(fā)送對應(yīng)所述當(dāng)前的更新日志的響應(yīng)消息,以使所述服務(wù)端在接收到所述響應(yīng)消息后發(fā)送所述當(dāng)前的更新日志的下一條的更新日志;或者,
接收服務(wù)端同時發(fā)送的多條更新日志。
一些實施例中,當(dāng)需要發(fā)送給客戶端的更新日志包括:多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志時,所述接收模塊171具體用于:
接收服務(wù)端發(fā)送的合并處理后的更新日志,或者,在服務(wù)端合并處理后確定不需要向客戶端發(fā)送更新日志時,不接收服務(wù)端發(fā)送的更新日志,所述合并處理后的更新日志是所述服務(wù)端將所述多條同屬于同一個數(shù)據(jù)源的數(shù)據(jù)的更新日志進行合并處理后得到的。
一些實施例中,參見圖18,該裝置還包括:
第一發(fā)送模塊173,用于向所述服務(wù)端發(fā)送對應(yīng)所述更新日志的響應(yīng)消息,以使所述服務(wù)端在沒有接收到所述響應(yīng)消息時重新發(fā)送所述更新日志。
一些實施例中,參見圖18,該裝置還包括:
第二發(fā)送模塊174,用于向所述服務(wù)端發(fā)送對應(yīng)所述更新日志的第一響應(yīng)消息,以使所述服務(wù)端在在接收到所述第一響應(yīng)消息后向所述客戶端發(fā)送對應(yīng)所述第一響應(yīng)消息的第二響應(yīng)消息;
第三發(fā)送模塊175,用于如果沒有接收到所述第二響應(yīng)消息,重新向所述服務(wù)端發(fā)送所述第一響應(yīng)消息。
一些實施例中,參見圖18,所述接收模塊171還用于:
接收所述服務(wù)端發(fā)送的過期指令,所述過期指令是所述服務(wù)端在確定所述客戶端未處理的更新日志的數(shù)量大于預(yù)設(shè)閾值后發(fā)送的;
所述裝置還包括:
清理模塊176,用于根據(jù)所述過期指令清理本地數(shù)據(jù),并從服務(wù)端重新獲取同步數(shù)據(jù)。
一些實施例中,參見圖18,該裝置還包括:
通知模塊177,用于對訂閱了所述更新日志的業(yè)務(wù)方進行回調(diào)通知。
一些實施例中,所述更新日志中包括:操作指令和發(fā)生變更的數(shù)據(jù)內(nèi)容,所述更新模塊72具體用于:
在本地數(shù)據(jù)中,對所述更新日志中包括的發(fā)生變更的數(shù)據(jù)內(nèi)容,進行所述更新日志中包括的操作指令對應(yīng)的操作。
一些實施例中,參見圖18,該裝置還包括:
判斷模塊178,用于判斷如下項中的一項或多項:
判斷所述更新日志是否是重復(fù)指令,以便在不是重復(fù)指令時根據(jù)所述更新日志更新本地數(shù)據(jù),否則,不處理所述更新日志;
判斷所述更新日志中包含的數(shù)據(jù)是否被標(biāo)記為過期,以便在沒有標(biāo)記為過期時根據(jù)所述更新日志更新本地數(shù)據(jù),否則,不處理所述更新日志,并向所述服務(wù)端發(fā)送過期消息;
判斷所述更新日志中包含的數(shù)據(jù)的版本是否比本地數(shù)據(jù)的版本新,以便在更新日志中包含的數(shù)據(jù)的版本比本地數(shù)據(jù)的版本新時,根據(jù)所述更新日志更新本地數(shù)據(jù),否則,不處理所述更新日志;
判斷客戶端當(dāng)前所處的狀態(tài)是否屬于預(yù)設(shè)狀態(tài),以便在屬于預(yù)設(shè)狀態(tài)時,根據(jù)所述更新日志更新本地數(shù)據(jù),否則,不處理所述更新日志,所述預(yù)設(shè)狀態(tài)包括:初始化成功、初始化失敗、同步成功或同步失敗。
一些實施例中,參見圖18,該裝置還包括:
狀態(tài)確定模塊179,用于執(zhí)行如下項中的一項或多項:
根據(jù)初始化行為或者標(biāo)記行為進行初始化,得到初始化狀態(tài),所述初始化狀態(tài)包括:未初始化、初始化成功或者初始化失??;
根據(jù)所述更新日志更新發(fā)生變更的本地數(shù)據(jù)后,得到同步狀態(tài),所述同步狀態(tài)包括:同步成功或同步失??;
根據(jù)數(shù)據(jù)的使用情況,將預(yù)設(shè)時間內(nèi)未使用的數(shù)據(jù)標(biāo)記為過期,得到數(shù)據(jù)過期狀態(tài)。
上述模塊的具體內(nèi)容可以參見上述方法實施例中的相關(guān)描述。
本實施例中,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可 以提高更新效率,避免資源浪費。
圖19是本申請另一實施例提出的數(shù)據(jù)同步系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)190包括服務(wù)端裝置191和客戶端裝置192。其中,服務(wù)端裝置可以如圖15或圖16所示,客戶端裝置可以如圖17或圖18所示。
上述模塊的具體內(nèi)容可以參見上述方法實施例中的相關(guān)描述。
本實施例中,通過在數(shù)據(jù)發(fā)生變更時,將更新日志發(fā)送給客戶端,可以降低滯后性,從而提高數(shù)據(jù)更新的實時性,另外,通過更新發(fā)生變更的本地數(shù)據(jù),而不是整體更新,可以提高更新效率,避免資源浪費。
需要說明的是,在本申請的描述中,術(shù)語“第一”、“第二”等僅用于描述目的,而不能理解為指示或暗示相對重要性。此外,在本申請的描述中,除非另有說明,“多個”的含義是指至少兩個。
流程圖中或在此以其他方式描述的任何過程或方法描述可以被理解為,表示包括一個或更多個用于實現(xiàn)特定邏輯功能或過程的步驟的可執(zhí)行指令的代碼的模塊、片段或部分,并且本申請的優(yōu)選實施方式的范圍包括另外的實現(xiàn),其中可以不按所示出或討論的順序,包括根據(jù)所涉及的功能按基本同時的方式或按相反的順序,來執(zhí)行功能,這應(yīng)被本申請的實施例所屬技術(shù)領(lǐng)域的技術(shù)人員所理解。
應(yīng)當(dāng)理解,本申請的各部分可以用硬件、軟件、固件或它們的組合來實現(xiàn)。在上述實施方式中,多個步驟或方法可以用存儲在存儲器中且由合適的指令執(zhí)行系統(tǒng)執(zhí)行的軟件或固件來實現(xiàn)。例如,如果用硬件來實現(xiàn),和在另一實施方式中一樣,可用本領(lǐng)域公知的下列技術(shù)中的任一項或他們的組合來實現(xiàn):具有用于對數(shù)據(jù)信號實現(xiàn)邏輯功能的邏輯門電路的離散邏輯電路,具有合適的組合邏輯門電路的專用集成電路,可編程門陣列(PGA),現(xiàn)場可編程門陣列(FPGA)等。
本技術(shù)領(lǐng)域的普通技術(shù)人員可以理解實現(xiàn)上述實施例方法攜帶的全部或部分步驟是可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機可讀存儲介質(zhì)中,該程序在執(zhí)行時,包括方法實施例的步驟之一或其組合。
此外,在本申請各個實施例中的各功能單元可以集成在一個處理模塊中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個模塊中。上述集成的模塊既可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。所述集成的模塊如果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,也可以存儲在一個計算機可讀取存儲介質(zhì)中。
上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
在本說明書的描述中,參考術(shù)語“一個實施例”、“一些實施例”、“示例”、“具體示例”、 或“一些示例”等的描述意指結(jié)合該實施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點包含于本申請的至少一個實施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結(jié)合。
盡管上面已經(jīng)示出和描述了本申請的實施例,可以理解的是,上述實施例是示例性的,不能理解為對本申請的限制,本領(lǐng)域的普通技術(shù)人員在本申請的范圍內(nèi)可以對上述實施例進行變化、修改、替換和變型。