一種數據同步方法及裝置與流程
2023-09-23 02:05:35 2

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