分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及數(shù)據(jù)庫技術,尤其涉及一種分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步方法和裝置。
【背景技術】
[0002]分布式關系型數(shù)據(jù)庫(DataBase,簡稱:DB),因其采用廉價的設備堆疊成具備高可用性和高擴展性的計算集群得到廣泛應用。
[0003]數(shù)據(jù)同步是指將一個數(shù)據(jù)庫節(jié)點的數(shù)據(jù)迀移到另一個數(shù)據(jù)庫節(jié)點,分布式關系型數(shù)據(jù)庫在數(shù)據(jù)迀移的過程中,需要一定的時間,在數(shù)據(jù)迀移過程中,業(yè)務面可能會對原數(shù)據(jù)庫節(jié)點進行增、刪、改等操作,有可能導致數(shù)據(jù)不一致,因此,為了保證數(shù)據(jù)完全同步,現(xiàn)有技術中,首先將原數(shù)據(jù)庫節(jié)點的數(shù)據(jù)文件拷貝到新數(shù)據(jù)庫節(jié)點中,依照原數(shù)據(jù)庫節(jié)點的日志文件,對新數(shù)據(jù)庫節(jié)點重做數(shù)據(jù)同步開始時間點后的所有事務操作,從而,保證新數(shù)據(jù)庫節(jié)點中數(shù)據(jù)與原數(shù)據(jù)庫節(jié)點中保持一致。
[0004]然而,現(xiàn)有技術中,當數(shù)據(jù)同步時間過長,事務提交頻繁的時候,記錄事務操作的日志文件會呈現(xiàn)批量增長,而數(shù)據(jù)庫節(jié)點的日志文件的存儲空間有限,一般采取“環(huán)形存儲”的方式,日志文件大小超過存儲空間大小時,會覆蓋最早的日志文件,導致數(shù)據(jù)丟失。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步方法和裝置,以保證數(shù)據(jù)的完整性。
[0006]本發(fā)明第一方面提供一種分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步方法,包括:
[0007]接收客戶端發(fā)送的事務操作請求,確定所述事務操作請求所要操作的數(shù)據(jù)所在的數(shù)據(jù)分片是否為迀移狀態(tài);
[0008]若所述數(shù)據(jù)分片為迀移狀態(tài),將所述數(shù)據(jù)分片地址重定向到所述數(shù)據(jù)分片的緩存地址,所述數(shù)據(jù)分片在緩存中被分為N個小分區(qū),所述N個小分區(qū)被標識為已迀移的小分區(qū)和未迀移的小分區(qū),所述N為大于等于2的整數(shù);
[0009]確定所述事務操作請求所要操作的數(shù)據(jù)是否為已迀移的小分區(qū)對應的數(shù)據(jù),若為已迀移的小分區(qū)對應的數(shù)據(jù),則在重做日志中記錄所述事務操作的記錄。
[0010]進一步地,當緩存中的數(shù)據(jù)分片的所有小分區(qū)均已迀移之后,所述方法還包括:
[0011]將所述重做日志中同一地址中的所有事務操作的記錄中除最后一次的事務操作的記錄之外的其他事務操作的記錄刪除。
[0012]進一步地,所述方法還包括:
[0013]通過游標位置標識已迀移的小分區(qū)和未迀移的小分區(qū),所述游標位置之前的小分區(qū)為已迀移的小分區(qū),所述游標位置指向的小分區(qū)和所述游標位置之后的小分區(qū)為未迀移的小分區(qū)。
[0014]進一步地,所述方法還包括:
[0015]當小分區(qū)開始迀移之后,在數(shù)據(jù)分片狀態(tài)信息表中將所述小分區(qū)對應的狀態(tài)信息標識為已迀移。
[0016]進一步地,所述接收客戶端發(fā)送的事務操作請求,確定所述事務操作請求所要操作的數(shù)據(jù)所在的數(shù)據(jù)分片是否為迀移狀態(tài)之前,還包括:
[0017]將所述數(shù)據(jù)分片復制到緩存中,在所述緩存中將所述數(shù)據(jù)分片均勻切分為所述N個小分區(qū)。
[0018]本發(fā)明第二方面提供一種分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步裝置,包括:
[0019]接收模塊,用于接收客戶端發(fā)送的事務操作請求,確定所述事務操作請求所要操作的數(shù)據(jù)所在的數(shù)據(jù)分片是否為迀移狀態(tài);
[0020]重定向模塊,用于若所述數(shù)據(jù)分片為迀移狀態(tài),將所述數(shù)據(jù)分片地址重定向到所述數(shù)據(jù)分片的緩存地址,所述數(shù)據(jù)分片在緩存中被分為N個小分區(qū),所述N個小分區(qū)被標識為已迀移的小分區(qū)和未迀移的小分區(qū),所述N為大于等于2的整數(shù);
[0021]重做日志記錄模塊,用于確定所述事務操作請求所要操作的數(shù)據(jù)是否為已迀移的小分區(qū)對應的數(shù)據(jù),若為已迀移的小分區(qū)對應的數(shù)據(jù),則在重做日志中記錄所述事務操作的記錄。
[0022]進一步地,所述重做日志記錄模塊還用于將所述重做日志中同一地址中的所有事務操作的記錄中除最后一次的事務操作的記錄之外的其他事務操作的記錄刪除。
[0023]進一步地,還包括:
[0024]標識模塊,用于通過游標位置標識已迀移的小分區(qū)和未迀移的小分區(qū),所述游標位置之前的小分區(qū)為已迀移的小分區(qū),所述游標位置指向的小分區(qū)和所述游標位置之后的小分區(qū)為未迀移的小分區(qū)。
[0025]進一步地,還包括:
[0026]標識模塊,用于當小分區(qū)開始迀移之后,在數(shù)據(jù)分片狀態(tài)信息表中將所述小分區(qū)對應的狀態(tài)信息標識為已迀移。
[0027]進一步地,還包括:
[0028]緩存模塊,用于將所述數(shù)據(jù)分片復制到緩存中,在所述緩存中將所述數(shù)據(jù)分片均勻切分為所述N個小分區(qū)。
[0029]本發(fā)明提供的分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步方法和裝置,通過確定事務操作請求所要操作的數(shù)據(jù)所在的數(shù)據(jù)分片是否為迀移狀態(tài);當數(shù)據(jù)分片為迀移狀態(tài),將數(shù)據(jù)分片地址重定向到數(shù)據(jù)分片的緩存地址,數(shù)據(jù)分片在緩存中被分為N個小分區(qū),確定事務操作請求所要操作的數(shù)據(jù)是否為已迀移的小分區(qū)對應的數(shù)據(jù),若為已迀移的小分區(qū)對應的數(shù)據(jù),則在重做日志中記錄事務操作的記錄,由于重做日志中只記錄對已迀移的小分區(qū)的事務操作,不記錄對未迀移的小分區(qū)的事務操作,因此,減少了重做日志中記錄的數(shù)量,節(jié)省了日志存儲空間,從而,不會造成數(shù)據(jù)丟失,保證數(shù)據(jù)的完整性,以及數(shù)據(jù)同步的一致性。
【附圖說明】
[0030]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0031]圖1為本發(fā)明的分布式關系型數(shù)據(jù)庫的系統(tǒng)架構圖;
[0032]圖2為本發(fā)明分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步方法實施例的流程示意圖;
[0033]圖3為本發(fā)明分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步裝置實施例的結構示意圖。
【具體實施方式】
[0034]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0035]本發(fā)明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”、“第三”“第四”等(如果存在)是用于區(qū)別類似的對象,而不必用于描述特定的順序或先后次序。應該理解這樣使用的數(shù)據(jù)在適當情況下可以互換,以便這里描述的本發(fā)明的實施例例如能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術語“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過程、方法、系統(tǒng)、產(chǎn)品或設備不必限于清楚地列出的那些步驟或單元,而是可包括沒有清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設備固有的其它步驟或單元。
[0036]圖1為本發(fā)明的分布式關系型數(shù)據(jù)庫的系統(tǒng)架構圖,如圖1所示,本發(fā)明的分布式系統(tǒng)架構圖在現(xiàn)有的系統(tǒng)架構圖的基礎上,增加了數(shù)據(jù)分片標識層以及緩存。
[0037]其中,數(shù)據(jù)路由層記錄了每個數(shù)據(jù)分片的位置信息(具體存放于哪個數(shù)據(jù)庫節(jié)點、偏移量等),客戶端發(fā)起的事務操作請求通過數(shù)據(jù)路由層找到相應的數(shù)據(jù)分片進行操作。數(shù)據(jù)分片標識層位于數(shù)據(jù)路由層,具用于標識正在迀移的數(shù)據(jù)分片與未迀移的數(shù)據(jù)分片,具體地,可以是在數(shù)據(jù)路由層中數(shù)據(jù)路由表中增加一個字段,也可以作為一個單獨的表存在,對此本發(fā)明不作限制,只要能夠標識正在迀移的數(shù)據(jù)分片即可。對正在迀移的數(shù)據(jù)分片采用不同的數(shù)據(jù)路由方式,即接收到事務操作請求時對正在迀移的數(shù)據(jù)分片的操作,則沖向定到數(shù)據(jù)分片的緩存地址。
[0038]緩存,用于緩存正在迀移的數(shù)據(jù)分片,在緩存中將數(shù)據(jù)分片分為N個小分區(qū),如圖1中,將DBl的TABj分成TAB_l_a、TAB_l_b、……TAB_1_N;N為大于等于2的整數(shù),緩存中包含重做日志以及數(shù)據(jù)分片狀態(tài)信息表,數(shù)據(jù)分片狀態(tài)信息表具體地可以記錄游標的位置,游標I用于指示待迀移的小分區(qū),游標之前的小分區(qū)為已迀移的小分區(qū)或者開始迀移的小分區(qū),游標指向的小分區(qū)以及游標之后的小分區(qū)為未迀移的小分區(qū)。其中,重做日志中記錄了迀移過程中,對游標之前的小分區(qū)的事務操作記錄。在數(shù)據(jù)分片的所有小分區(qū)迀移完成之后,根據(jù)重做日志對迀移后的數(shù)據(jù)庫中的數(shù)據(jù)進行重做。由于重做日志中只記錄對已迀移的小分區(qū)的事務操作,不記錄對未迀移的小分區(qū)的事務操作,因此,減少了重做日志中記錄的數(shù)量,節(jié)省了日志存儲空間,從而,不會造成數(shù)據(jù)丟失,保證數(shù)據(jù)的完整性,以及數(shù)據(jù)同步的一致性。
[0039]下面以具體地實施例對本發(fā)明的技術方案進行詳細說明。下面這幾個具體的實施例可以相互結合,對于相同或相似的概念或過程可能在某些實施例不再贅述。
[0040]圖2為本發(fā)明分布式關系型數(shù)據(jù)庫的數(shù)據(jù)同步方法實施例的流程示意圖,結合圖I,本實施例以將DBl的TAB_1的數(shù)據(jù)迀移到DB2中為例,本實施例的方法如下:
[0041 ] S201:將數(shù)據(jù)分片復制到緩存中,在緩存中將數(shù)據(jù)分片均勻切分為N個小分區(qū)。
[0042]其中,N為大于等于2的整數(shù)。
[0043]在數(shù)據(jù)迀移開始時,首先將DBl的TAB_1數(shù)據(jù)分片復制到緩存中,緩存可以是內(nèi)存或者高速閃存如SSD,通過快速拷貝的方式將數(shù)據(jù)分片復制到緩存中之后,在緩存中將分片均與分為N個小分區(qū),可以通過游標控制進行逐個小分區(qū)的迀移,通過游標位置標識已迀移的小分區(qū)和未迀移的小分區(qū),所述游標位置之前的小分區(qū)為已迀移的小分區(qū),所述游標位置指向的小分區(qū)和所述游標位置之后的小分區(qū)為未迀移的小分區(qū)。當一個小分區(qū)開始迀移以后,將游標指向下一個待迀移的小分區(qū)的起始位置,在數(shù)據(jù)分片狀態(tài)信息表中將所述小分區(qū)對應的狀態(tài)信息標識為已迀移,或者,在數(shù)據(jù)分片狀態(tài)信息表中存儲有游標的位置,游標位置之前的小分區(qū)表示已迀移的小分區(qū),所述游標位置指向的小分區(qū)和所述游標位置之后的小分區(qū)表示未迀移的小分區(qū),具體地,只要能夠區(qū)分小分區(qū)的迀移狀態(tài)即可,