本申請涉及計算機技術領域,尤其涉及一種數(shù)據(jù)同步方法及裝置。
背景技術:
隨著信息技術的發(fā)展,在線系統(tǒng)(如:網站)的訪問量不斷增加,用戶規(guī)模不斷擴大,為了保證用戶獲得在線系統(tǒng)所提供的業(yè)務服務的穩(wěn)定性和效率,在線系統(tǒng)后臺的服務器和相應的數(shù)據(jù)庫通常會部署在異地,其中,部署于異地的數(shù)據(jù)庫往往是讀寫分離的兩類數(shù)據(jù)庫,即,讀數(shù)據(jù)庫和寫數(shù)據(jù)庫。
現(xiàn)有技術中,為了減緩大量訪問請求的壓力,并提升對業(yè)務處理的效率,服務器會針對相應的業(yè)務設置緩存,即,將該業(yè)務對應的數(shù)據(jù)存儲于緩存中(緩存中的數(shù)據(jù)與數(shù)據(jù)庫中的該業(yè)務對應的數(shù)據(jù)一致),從而,服務器可以通過緩存中的數(shù)據(jù)對數(shù)據(jù)庫中的數(shù)據(jù)執(zhí)行讀/寫操作,最終完成對業(yè)務的處理。
具體地,如圖1所示,第一服務器和第一數(shù)據(jù)庫位于a地,相應地,第二服務器和第二數(shù)據(jù)庫位于b地,第一服務器和第二服務器分別具有相應的緩存,緩存中的數(shù)據(jù)分別與第一數(shù)據(jù)庫和第二數(shù)據(jù)庫中的數(shù)據(jù)一致,此時,位于a地的第一服務器處理業(yè)務后將相應的數(shù)據(jù)寫入第一數(shù)據(jù)庫中,第一數(shù)據(jù)庫和位于b地的第二數(shù)據(jù)庫之間保持數(shù)據(jù)傳輸,也即,第一數(shù)據(jù)庫和第二數(shù)據(jù)庫中的數(shù)據(jù)可保持同步。
但是,當?shù)谝环掌魍ㄟ^緩存修改了第一數(shù)據(jù)庫中的數(shù)據(jù)后,對于b地的第二服務器而言,其中的緩存內的數(shù)據(jù)就會失效(也即,當前第二服務器的緩存內的數(shù)據(jù)與第二數(shù)據(jù)庫中的數(shù)據(jù)并不一致),這就會導致查詢業(yè)務所查詢到的數(shù)據(jù)不準確。
技術實現(xiàn)要素:
本申請實施例提供一種數(shù)據(jù)同步方法及裝置,用以解決現(xiàn)有技術中異地服務器中緩存數(shù)據(jù)同步的問題。
本申請實施例提供的一種數(shù)據(jù)同步方法,包括:
第一服務器接收寫請求,其中,所述第一服務器與第一數(shù)據(jù)庫相匹配;
根據(jù)所述寫請求,將與所述寫請求對應的數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫;
將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至該第一服務器的第一緩存中;
根據(jù)第一緩存中加載的待同步數(shù)據(jù),生成緩存同步數(shù)據(jù)發(fā)送給第二服務器,使得所述第二服務器根據(jù)所述緩存同步數(shù)據(jù),將待同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
本申請實施例還提供的一種數(shù)據(jù)同步方法,包括:
第二服務器接收由第一服務器發(fā)送的緩存同步數(shù)據(jù);其中,所述緩存同步數(shù)據(jù)是第一服務器將數(shù)據(jù)寫請求對應的數(shù)據(jù)寫入至第一數(shù)據(jù)庫中,并將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至第一緩存中的;
根據(jù)所述緩存同步數(shù)據(jù),將待同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
本申請實施例提供的一種數(shù)據(jù)同步裝置,包括:
接收模塊,用于接收寫請求,其中,所述第一服務器與第一數(shù)據(jù)庫相匹配;
寫入模塊,用于根據(jù)所述寫請求,將與所述寫請求對應的數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫;
加載模塊,用于將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至該第一服務器的第一緩存中;
數(shù)據(jù)同步模塊,用于根據(jù)第一緩存中加載的待同步數(shù)據(jù),生成緩存同步數(shù)據(jù)發(fā)送給第二服務器,使得所述第二服務器根據(jù)所述緩存同步數(shù)據(jù),將待同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
本申請實施例還提供的一種數(shù)據(jù)同步裝置,包括:
接收模塊,用于接收由第一服務器發(fā)送的緩存同步數(shù)據(jù);其中,所述緩存 同步數(shù)據(jù)是第一服務器將數(shù)據(jù)寫請求對應的數(shù)據(jù)寫入至第一數(shù)據(jù)庫中,并將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至第一緩存中的;
數(shù)據(jù)同步模塊,用于根據(jù)所述緩存同步數(shù)據(jù),將待同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
本申請實施例提供一種數(shù)據(jù)同步方法及裝置,通過該方法,當?shù)谝环掌鞲鶕?jù)寫請求將相應的數(shù)據(jù)寫入至第一數(shù)據(jù)庫,并將寫入的數(shù)據(jù)加載至第一緩存后,會向位于異地的第二服務器發(fā)送緩存同步數(shù)據(jù),以使得第二服務器根據(jù)緩存同步數(shù)據(jù),將待同步的數(shù)據(jù)寫入第二緩存中,從而完成緩存中數(shù)據(jù)的同步操作。這樣的方式可以有效保證第二緩存中的數(shù)據(jù)實時獲取同步更新,不會因長時間不更新導致第二緩存中的數(shù)據(jù)失效。
附圖說明
此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:
圖1為異地服務器與數(shù)據(jù)庫的架構示意圖;
圖2為本申請實施例提供的一種數(shù)據(jù)同步過程;
圖3為本申請實施例提供的另一種數(shù)據(jù)同步過程;
圖4為本申請實施例提供的基于圖1所示的架構下在實際應用時的數(shù)據(jù)同步過程;
圖5為本申請實施例提供的數(shù)據(jù)同步裝置結構示意圖;
圖6為本申請實施例提供的數(shù)據(jù)同步裝置結構示意圖。
具體實施方式
為使本申請的目的、技術方案和優(yōu)點更加清楚,下面將結合本申請具體實施例及相應的附圖對本申請技術方案進行清楚、完整地描述。顯然,所描述的 實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├绢I域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護的范圍。
在本申請實施中,異地的服務器和數(shù)據(jù)庫的結構關系仍可以參考圖1,在圖1所示的結構關系的基礎上,本申請實施例中提供一種數(shù)據(jù)同步方法,如圖2所示,具體包括以下步驟:
s201:第一服務器接收寫請求。
其中,第一服務器與第一數(shù)據(jù)庫相匹配。
所述的第一服務器,是在線系統(tǒng)后臺用于處理業(yè)務的服務器,可以認為,第一服務器在對業(yè)務進行處理時,用于向第一數(shù)據(jù)庫寫入數(shù)據(jù),這里的寫入數(shù)據(jù)包括對數(shù)據(jù)的修改、刪除、增加等操作。也就是說,在本申請實施例中,第一服務器用于執(zhí)行寫操作。當然,在實際應用中,第一服務器可以具備對第一數(shù)據(jù)庫中的數(shù)據(jù)進行查詢、讀取的操作,在本申請中將針對第一服務器執(zhí)行寫操作的場景進行說明,這并不構成對本申請的限定。
所述的第一數(shù)據(jù)庫,具體是一種寫數(shù)據(jù)庫,也即,第一數(shù)據(jù)庫可接收第一服務器寫入數(shù)據(jù)。在實際應用中,第一數(shù)據(jù)庫和第一服務器處于同一位置(即如圖1所示)。
正如前述,第一服務器可以執(zhí)行寫操作,所以,第一服務器可對相應業(yè)務的寫請求進行處理。本申請實施中,寫請求由相應的業(yè)務發(fā)出。這里并不作具體限定。
s202:根據(jù)所述寫請求,將與所述寫請求對應的數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫。
上述寫請求對應的數(shù)據(jù)就是需要進行增加、刪除或修改等操作的數(shù)據(jù),那么,第一服務器在接收到寫請求后,就會將相應的數(shù)據(jù)寫入至與第一服務器相匹配的第一數(shù)據(jù)庫中。
s203:將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至該第一服務器的第一緩存中。
作為在本申請實施例中的一種方式,所述的第一緩存可以是第一服務器在其內存中創(chuàng)建的緩存,而在本申請實施例中的另一種方式下,若在a地有多臺服務器,那么,第一緩存可由單獨的緩存設備實現(xiàn),也即,多臺服務器共用第一緩存。這兩種方式將根據(jù)實際應用的需要進行設定,并不構成對本申請的限定。
當?shù)谝环掌鲗⑾鄳臄?shù)據(jù)寫入至第一服務器后,為了保證該第一緩存中的數(shù)據(jù)與第一數(shù)據(jù)庫內的數(shù)據(jù)的一致性,所以,第一服務器還會將寫入至第一數(shù)據(jù)庫中的數(shù)據(jù)加載至第一緩存中??梢哉J為,第一服務器加載至第一緩存中的數(shù)據(jù)在后續(xù)過程中將同步至第二緩存中,故第一服務器加載至第一緩存中的數(shù)據(jù)也稱為待同步數(shù)據(jù)(此時還未進行緩存之間的數(shù)據(jù)同步操作)。之后將執(zhí)行緩存之間的數(shù)據(jù)同步操作,也即,執(zhí)行下述步驟s204。
s204:根據(jù)第一緩存中加載的待同步數(shù)據(jù),生成緩存同步數(shù)據(jù)發(fā)送給第二服務器,使得所述第二服務器根據(jù)所述緩存同步數(shù)據(jù),將待同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
需要說明的是,在實際應用時,第一數(shù)據(jù)庫和第二數(shù)據(jù)庫之間會保持實時的數(shù)據(jù)同步,也就是說,經過前述步驟后,第一服務器寫入至第一數(shù)據(jù)庫中的數(shù)據(jù)將同步是第二數(shù)據(jù)庫中。但此時,第二緩存內的數(shù)據(jù)未被同步,其中的數(shù)據(jù)已成為過期數(shù)據(jù)。
基于此,在本申請實施例中,當?shù)谝环掌鲗懭胫恋谝粩?shù)據(jù)庫中的數(shù)據(jù)加載至第一緩存中后,為了保證第二緩存內的數(shù)據(jù)也能夠同步,故第一服務器會將第一緩存中加載的待同步數(shù)據(jù),發(fā)送給第二服務器,使得第二服務器完成對第二緩存的數(shù)據(jù)同步操作。
當然,對于上述的第二服務器而言,可以是在線系統(tǒng)后臺用于處理查詢業(yè)務的服務器(即,在實際應用時,第二服務器所處理的請求通常時讀請求)。此外,對于第二緩存而言,與上述的第一緩存相類似,既可以是由第二服務器在其內存中所創(chuàng)建的,也可以是由相應的緩存設備實現(xiàn),供多臺服務器使用。 這里并不構成對本申請的限定。
通過上述步驟,當?shù)谝环掌鞲鶕?jù)寫請求將相應的數(shù)據(jù)寫入至第一數(shù)據(jù)庫,并將寫入的數(shù)據(jù)加載至第一緩存后,會向位于異地的第二服務器發(fā)送緩存同步數(shù)據(jù),以使得第二服務器根據(jù)緩存同步數(shù)據(jù),將待同步的數(shù)據(jù)寫入第二緩存中,從而完成緩存中數(shù)據(jù)的同步操作。這樣的方式可以有效保證第二緩存中的數(shù)據(jù)實時獲取同步更新,不會因長時間不更新導致第二緩存中的數(shù)據(jù)失效。
對于本申請的上述內容需要說明的是,在實際應用中,第一服務器在向第二服務器發(fā)送緩存同步數(shù)據(jù)時,通常是以消息體的方式發(fā)送,其中,消息體是一種數(shù)據(jù)載體,用于傳輸數(shù)據(jù),如:超文本傳輸協(xié)議(hypertexttransferprotocol,http)消息體。消息體所承載的數(shù)據(jù)大小有限,而第一緩存中的待同步數(shù)據(jù)的大小可能超過消息體所能承載的數(shù)據(jù)容量大小,這種情況下將影響兩個異地的服務器之間的數(shù)據(jù)傳輸。
而考慮到在實際應用中,數(shù)據(jù)庫可提供一種能夠起到標識作用的sequence數(shù)據(jù),那么,如果使用sequence數(shù)據(jù)來代替數(shù)據(jù)大小過大的待同步數(shù)據(jù),則能夠保證異地的兩個服務器之間正常的數(shù)據(jù)傳輸。
因此,在本申請實施例中,在將與所述寫請求對應的數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫之前,所述方法還包括:所述第一服務器向所述第一數(shù)據(jù)庫申請sequence數(shù)據(jù),建立該sequence數(shù)據(jù)與所述寫請求對應的數(shù)據(jù)的關聯(lián)關系。
sequence數(shù)據(jù)具體是一種不重復、具有唯一性的序列,由第一數(shù)據(jù)庫提供。具體地,第一數(shù)據(jù)庫將根據(jù)第一服務器的申請,為第一服務器提供sequence數(shù)據(jù)(一次申請獲得一個sequence數(shù)據(jù)),第一服務器在獲得了sequence數(shù)據(jù)后,就會建立sequence數(shù)據(jù)和寫請求對應的數(shù)據(jù)之間的關聯(lián)關系。并將sequence數(shù)據(jù)和對應的數(shù)據(jù)一并寫入至第一數(shù)據(jù)庫中。
也即,對于前述步驟s202中,將與所述寫請求對應的數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫,具體包括:將所述數(shù)據(jù)以及與該數(shù)據(jù)相關聯(lián)的sequence數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫。
在實際應用時,第一數(shù)據(jù)庫將構建一張數(shù)據(jù)表,用以記錄sequence數(shù)據(jù)與寫請求對應的數(shù)據(jù)之間的關聯(lián)關系。
例如:如表1所示,為第一數(shù)據(jù)庫所構建的sequence數(shù)據(jù)表,其中,sequence數(shù)據(jù)表記錄了sequence數(shù)據(jù)和由第一服務器所寫入的數(shù)據(jù)之間的關聯(lián)關系。
表1
在表1中可見,由第一服務器寫入至第一數(shù)據(jù)庫中的數(shù)據(jù),都會有相應的sequence數(shù)據(jù)與其對應。當然,如表1所示的sequence表將存儲于第一數(shù)據(jù)庫中,這里并不構成對本申請的限定。
之后,第一服務器也會將sequence數(shù)據(jù)加載至第一緩存中,即,對于上述步驟s203中,將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至該第一服務器的第一緩存中,具體包括:將所述數(shù)據(jù)以及與該數(shù)據(jù)相關聯(lián)的sequence數(shù)據(jù)加載至所述第一緩存中。
這樣一來,此時第一緩存中就存儲了sequence數(shù)據(jù)以及第一服務器寫入第一數(shù)據(jù)庫中的數(shù)據(jù)。
在此情況下,上述步驟s204中,根據(jù)第一緩存中加載的待同步數(shù)據(jù),生成緩存同步數(shù)據(jù)發(fā)送給第二服務器,具體包括:判斷加載至第一緩存中的數(shù)據(jù)大小是否超過預設的消息體容量閾值,若是,則根據(jù)所述第一緩存中的sequence數(shù)據(jù)生成緩存同步數(shù)據(jù),發(fā)送給第二服務器,否則,則根據(jù)所述第一緩存中的待同步數(shù)據(jù)生成緩存同步數(shù)據(jù),發(fā)送給第二服務器。
也就是說,如果要進行同步的數(shù)據(jù)的大小超過了消息體能夠承載的數(shù)據(jù)容量,那么,就將sequence數(shù)據(jù)作為緩存同步數(shù)據(jù)發(fā)送給第二服務器,相反地,如果要進行同步的數(shù)據(jù)的大小在消息體能夠承載的數(shù)據(jù)容量之內,那么,可以 直接將待同步的數(shù)據(jù)作為緩存同步數(shù)據(jù)發(fā)送給第二服務器。
具體而言,在實際應用中的一種方式下,加載至第一緩存內的數(shù)據(jù)格式通常為鍵值對的形式,如:<key,value>。如果數(shù)據(jù)大小超過消息體的容量閾值,那么,就以<key,sequence>的方式作為緩存同步數(shù)據(jù);而如果數(shù)據(jù)大小并未超過消息體的容量閾值,那么,就直接以<key,value>的方式作為緩存同步數(shù)據(jù)。
通過上述內容可見,正是通過使用sequence數(shù)據(jù)的方式,能夠在進行緩存數(shù)據(jù)同步的過程中,有效避免因為傳輸?shù)臄?shù)據(jù)大小超過消息體容量閾值,導致數(shù)據(jù)傳輸過程受到影響。
以上內容是基于第一服務器側的描述,對于異地的第二服務器而言,本申請實施例中還提供一種數(shù)據(jù)同步方法,如圖3所示,具體包括以下步驟:
s301:第二服務器接收由第一服務器發(fā)送的緩存同步數(shù)據(jù)。
其中,所述緩存同步數(shù)據(jù)是第一服務器將數(shù)據(jù)寫請求對應的數(shù)據(jù)寫入至第一數(shù)據(jù)庫中,并將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至第一緩存中的。
s302:根據(jù)所述緩存同步數(shù)據(jù),將待同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
如前所述,由第一服務器發(fā)送的緩存同步數(shù)據(jù)可能有兩種情況,一種情況為:緩存同步數(shù)據(jù)中包含寫請求對應的數(shù)據(jù)。另一種情況為:緩存同步數(shù)據(jù)中包含與寫請求對應的數(shù)據(jù)具有關聯(lián)關系的sequence數(shù)據(jù)。若為第一種情況,那么,第二服務器可以直接將緩存同步數(shù)據(jù)加載至第二緩存中,而若為第二種情況,第二服務器需要從與之匹配的第二數(shù)據(jù)庫中,查找與sequence數(shù)據(jù)相對應的數(shù)據(jù)。
具體而言:
在所述緩存同步數(shù)據(jù)中包含寫請求對應的數(shù)據(jù)的場景下,上述步驟s302中,加載所述緩存同步數(shù)據(jù)至所述第二服務器的第二緩存中,具體包括:直接將所述緩存同步數(shù)據(jù)加載至所述第二服務器的第二緩存中。
在所述緩存同步數(shù)據(jù)中包含sequence數(shù)據(jù)的場景下,上述步驟s302中, 加載所述緩存同步數(shù)據(jù)至所述第二服務器的第二緩存中,具體包括:根據(jù)所述sequence數(shù)據(jù),從與所述第二服務器相匹配的第二數(shù)據(jù)庫中查找與該sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù),將查找到的、與sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù)懶加載至所述第二服務器的第二緩存中。
從上述內容中可見,sequence數(shù)據(jù)起到了數(shù)據(jù)標識的作用,通過sequence數(shù)據(jù),能夠有效減少在異地的兩個服務器之間所傳輸?shù)臄?shù)據(jù)的大小,便于數(shù)據(jù)的傳輸,當?shù)诙掌鹘邮盏搅藄equence數(shù)據(jù),就可以根據(jù)sequence數(shù)據(jù)從第二數(shù)據(jù)庫中查找與該sequence數(shù)據(jù)相匹配的數(shù)據(jù),加載至第二緩存中,也保證了第二緩存中的數(shù)據(jù)能夠及時得到同步更新。
當然,在本申請實施例中的一種方式下,第二服務器采用懶加載的方式,將與sequence數(shù)據(jù)具有關聯(lián)關系的數(shù)據(jù)加載至第二緩存中。其中,懶加載是指在有需求時才進行加載,換言之,只有當?shù)诙掌鹘邮盏搅讼鄳牟樵冋埱蠛?,才會將查詢請求所要查詢的?shù)據(jù)從第二數(shù)據(jù)庫中加載至第二緩存中,這樣的方式能夠減緩第二服務器的運行負荷。
這里需要說明的是,若第二服務器采用上述懶加載的方式,那么,當?shù)诙掌鹘邮盏搅税衧equence數(shù)據(jù)的緩存同步數(shù)據(jù)后,將刪除第二緩存中當前同屬于同一業(yè)務的數(shù)據(jù),這樣以便于后續(xù)根據(jù)查詢請求對相應的數(shù)據(jù)進行懶加載。
此外,在實際應用時,處于異地的兩個數(shù)據(jù)庫之間進行數(shù)據(jù)同步時,第二數(shù)據(jù)庫中的數(shù)據(jù)可能并未及時完成同步(可能由網絡延遲、數(shù)據(jù)庫的工作負荷等原因所導致,這里不作具體限定),在這樣的情況下,所述方法還包括:若未查找到與sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù),則進行重試,并在重試指定次數(shù)后,向第一服務器發(fā)送同步失敗通知。
例如,當?shù)诙掌鞲鶕?jù)sequence數(shù)據(jù)在第二數(shù)據(jù)庫中未查找到對應的數(shù)據(jù)時,第二服務器可以重試3次,并在重試了3次均未查找到時,則將發(fā)送同步失敗通知。
結合上述如圖2和圖3所示的數(shù)據(jù)同步方法,在實際應用時,具體如圖4所示,包括:
s401:第一服務器接收寫請求。
s402:根據(jù)所述寫請求,將與所述寫請求對應的數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫。
s403:將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至該第一服務器的第一緩存中。
s404:根據(jù)第一緩存中加載的待同步數(shù)據(jù),生成緩存同步數(shù)據(jù)發(fā)送給第二服務器。其中,若緩存同步數(shù)據(jù)中包含寫請求對應的數(shù)據(jù),則執(zhí)行步驟s405;若緩存同步數(shù)據(jù)中包含sequence數(shù)據(jù),則執(zhí)行步驟s406及步驟s407。
s405:第二服務器直接將所述緩存同步數(shù)據(jù)加載至所述第二服務器的第二緩存中。
s406:第二服務器根據(jù)所述sequence數(shù)據(jù),從第二數(shù)據(jù)庫中查找與該sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù)。
s407:第二服務器將查找到的、與sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù)懶加載至第二緩存中。
以上為本申請實施例提供的數(shù)據(jù)同步方法基于同樣的思路,本申請實施例還提供一種數(shù)據(jù)同步裝置,如圖5所示。在圖5中,所述數(shù)據(jù)同步裝置包括:接收模塊501、寫入模塊502、加載模塊503、數(shù)據(jù)同步模塊504,其中,
接收模塊501,用于接收寫請求,其中,所述第一服務器與第一數(shù)據(jù)庫相匹配。
寫入模塊502,用于根據(jù)所述寫請求,將與所述寫請求對應的數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫。
加載模塊503,用于將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至該第一服務器的第一緩存中。
數(shù)據(jù)同步模塊504,用于根據(jù)第一緩存中加載的待同步數(shù)據(jù),生成緩存同步數(shù)據(jù)發(fā)送給第二服務器,使得所述第二服務器根據(jù)所述緩存同步數(shù)據(jù),將待 同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
在本申請實施例中,所述裝置還包括:sequence數(shù)據(jù)模塊505,用于在寫入模塊502執(zhí)行之前,向所述第一數(shù)據(jù)庫申請sequence數(shù)據(jù),建立該sequence數(shù)據(jù)與所述寫請求對應的數(shù)據(jù)的關聯(lián)關系。
基于上述的sequence數(shù)據(jù),寫入模塊502,具體用于將所述數(shù)據(jù)以及與該數(shù)據(jù)相關聯(lián)的sequence數(shù)據(jù)寫入至所述第一數(shù)據(jù)庫。并且,此場景下,加載模塊503,具體用于將所述數(shù)據(jù)以及與該數(shù)據(jù)相關聯(lián)的sequence數(shù)據(jù)加載至所述第一緩存中。
進一步地,數(shù)據(jù)同步模塊504,具體用于判斷加載至第一緩存中的數(shù)據(jù)大小是否超過預設的消息體容量閾值,若是,則根據(jù)所述第一緩存中的sequence數(shù)據(jù)生成緩存同步數(shù)據(jù),發(fā)送給第二服務器;否則,則根據(jù)所述第一緩存中的待同步數(shù)據(jù)生成緩存同步數(shù)據(jù),發(fā)送給第二服務器。
在上述裝置的基礎上,本申請實施例還提供一種數(shù)據(jù)同步裝置,如圖6所示。在圖6中,所述數(shù)據(jù)同步裝置包括:接收模塊601、數(shù)據(jù)同步模塊602,其中,
接收模塊601,用于接收由第一服務器發(fā)送的緩存同步數(shù)據(jù);其中,所述緩存同步數(shù)據(jù)是第一服務器將數(shù)據(jù)寫請求對應的數(shù)據(jù)寫入至第一數(shù)據(jù)庫中,并將寫入的數(shù)據(jù)作為待同步數(shù)據(jù)加載至第一緩存中的。
數(shù)據(jù)同步模塊602,用于根據(jù)所述緩存同步數(shù)據(jù),將待同步數(shù)據(jù)寫入該第二服務器的第二緩存中,完成數(shù)據(jù)同步。
若緩存同步數(shù)據(jù)中包含寫請求對應的數(shù)據(jù),則數(shù)據(jù)同步模塊602,具體用于直接將所述緩存同步數(shù)據(jù)加載至所述第二服務器的第二緩存中。
若緩存同步數(shù)據(jù)中包含sequence數(shù)據(jù),則數(shù)據(jù)同步模塊602,具體用于根據(jù)所述sequence數(shù)據(jù),從與所述第二服務器相匹配的第二數(shù)據(jù)庫中查找與該sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù),將查找到的、與sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù)懶加載至所述第二服務器的第二緩存中。
此外,數(shù)據(jù)同步模塊602,還用于若未查找到與sequence數(shù)據(jù)相關聯(lián)的數(shù)據(jù),則進行重試,并在重試指定次數(shù)后,向第一服務器發(fā)送同步失敗通知。
在一個典型的配置中,計算設備包括一個或多個處理器(cpu)、輸入/輸出接口、網絡接口和內存。
內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(ram)和/或非易失性內存等形式,如只讀存儲器(rom)或閃存(flashram)。內存是計算機可讀介質的示例。
計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結構、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質的例子包括,但不限于相變內存(pram)、靜態(tài)隨機存取存儲器(sram)、動態(tài)隨機存取存儲器(dram)、其他類型的隨機存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括暫存電腦可讀媒體(transitorymedia),如調制的數(shù)據(jù)信號和載波。
還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設備中還存在另外的相同要素。
本領域技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算 機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、cd-rom、光學存儲器等)上實施的計算機程序產品的形式。
以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領域技術人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內所作的任何修改、等同替換、改進等,均應包含在本申請的權利要求范圍之內。