專利名稱:跨機(jī)房的數(shù)據(jù)同步方法以及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及一種數(shù)據(jù)同步方法以及系統(tǒng)。
背景技術(shù):
出于數(shù)據(jù)安全備份或提高各地用戶的訪問速度等目的,一些互聯(lián)網(wǎng)站會(huì)在不同地點(diǎn)部署多個(gè)站點(diǎn),如圖1所示。其中每個(gè)站點(diǎn)為一臺(tái)服務(wù)器或者由多臺(tái)服務(wù)器所組成的集群。這些站點(diǎn)之間要求保持?jǐn)?shù)據(jù)同步,以使得其中所存儲(chǔ)的數(shù)據(jù)內(nèi)容相一致。圖1所示的跨機(jī)房的多站點(diǎn)部署方案中,當(dāng)請(qǐng)求方I對(duì)站點(diǎn)I提出請(qǐng)求時(shí),站點(diǎn)I作為本地站點(diǎn),其余站點(diǎn)均作為遠(yuǎn)程站點(diǎn)。而當(dāng)請(qǐng)求方2對(duì)站點(diǎn)2提出請(qǐng)求時(shí),站點(diǎn)2作為本地站點(diǎn),其余站點(diǎn)均作為遠(yuǎn)程站點(diǎn)。也就是說,本地站點(diǎn)和遠(yuǎn)程站點(diǎn)是根據(jù)每一請(qǐng)求的發(fā)生地而進(jìn)行區(qū)分的。為了實(shí)現(xiàn)跨機(jī)房的多站點(diǎn)之間數(shù)據(jù)同步,目前采用的方法有以下兩種:第一種方法采用同步數(shù)據(jù)傳輸,如圖2所示。請(qǐng)求方向本地站點(diǎn)提出請(qǐng)求。所述請(qǐng)求可以是數(shù)據(jù)的增加、修改或刪除等操作中的一種或多種。本地站點(diǎn)根據(jù)操作類型處理該請(qǐng)求。當(dāng)本地站點(diǎn)成功處理完該請(qǐng)求后,向遠(yuǎn)程站點(diǎn)以同步消息的形式轉(zhuǎn)發(fā)該請(qǐng)求。所述同步消息具有這樣的特點(diǎn):發(fā)送方在發(fā)送完畢后,就會(huì)堵塞其自身的進(jìn)程,直至接收到對(duì)該同步消息的響應(yīng),才繼續(xù)向下處理其它任務(wù)。本地站點(diǎn)等待遠(yuǎn)程站點(diǎn)返回處理結(jié)果,當(dāng)所有遠(yuǎn)程站點(diǎn)均返回“已成功處理完所述請(qǐng)求”的結(jié)果后,本地站點(diǎn)向請(qǐng)求方返回“已成功處理完所述請(qǐng)求”的結(jié)果。圖2所示的跨機(jī)房的數(shù)據(jù)同步方法的延遲時(shí)間長(zhǎng),請(qǐng)求方的等待時(shí)間長(zhǎng)。并且由于跨地域網(wǎng)絡(luò)不穩(wěn)定,容易造成發(fā)送或接收同步消息的響應(yīng)的堵塞,甚至造成本地站點(diǎn)的應(yīng)用服務(wù)假死。在實(shí)際應(yīng)用中,很少采用這種方法。第二種方法采用異步數(shù)據(jù)傳輸,如圖3所示。請(qǐng)求方向本地站點(diǎn)提出請(qǐng)求。所述請(qǐng)求包括數(shù)據(jù)的增加、修改、刪除操作。本地站點(diǎn)處理該請(qǐng)求。當(dāng)本地站點(diǎn)成功處理完該請(qǐng)求后,向遠(yuǎn)程站點(diǎn)以異步消息的形式轉(zhuǎn)發(fā)該請(qǐng)求。所述異步消息具有這樣的特點(diǎn):發(fā)送方在發(fā)送完畢后,不用等待該異步消息的響應(yīng),就可以繼續(xù)向下處理其它任務(wù)。當(dāng)本地站點(diǎn)成功轉(zhuǎn)發(fā)完該請(qǐng)求后,本地站點(diǎn)就向請(qǐng)求方返回“已成功處理完所述請(qǐng)求”的結(jié)果。在實(shí)際應(yīng)用中,大多采用這種方法。圖3所示的跨機(jī)房的數(shù)據(jù)同步方法,由于無需等待遠(yuǎn)程站點(diǎn)的處理結(jié)果即可返回請(qǐng)求方,因而降低了延遲時(shí)間和請(qǐng)求方的等待時(shí)間。但是由于網(wǎng)絡(luò)等原因,可能會(huì)造成異步消息傳送失敗,導(dǎo)致遠(yuǎn)程站點(diǎn)的數(shù)據(jù)沒有同步更新。另外,在圖3所示的跨機(jī)房的數(shù)據(jù)傳輸方法中,由于無法保證各個(gè)異步消息的時(shí)序性,可能會(huì)出現(xiàn)舊數(shù)據(jù)覆蓋新數(shù)據(jù)的情況。試舉一例說明,請(qǐng)參閱圖4:在tl時(shí)刻,本地站點(diǎn)將數(shù)據(jù)Dl的值由a0改為al,同時(shí)向其他遠(yuǎn)程站點(diǎn)發(fā)出異步消息Ml同步修改數(shù)據(jù)Dl的值。在之后的t2時(shí)刻,本地站點(diǎn)將數(shù)據(jù)Dl的值由al改為a2,同時(shí)向其他遠(yuǎn)程站點(diǎn)發(fā)出異步消息M2同步修改數(shù)據(jù)Dl的值。由于異步消息M1、M2沒有時(shí)序的先后。遠(yuǎn)程站點(diǎn)Rl可能在之后的t3時(shí)刻先收到異步消息M2,從而將數(shù)據(jù)Dl的值由a0改為a2。接著在之后的t4時(shí)刻,遠(yuǎn)程站點(diǎn)Rl又收到了異步消息M1,從而將數(shù)據(jù)Dl的值由a2改為al。此時(shí)遠(yuǎn)程站點(diǎn)Rl處就發(fā)生了以舊數(shù)據(jù)al覆蓋新數(shù)據(jù)a2的情況,這是不正確的。上述兩種方法,均不能有效地解決跨機(jī)房的數(shù)據(jù)同步問題。并且無論是以同步消息、還是以異步消息的形式轉(zhuǎn)發(fā)請(qǐng)求,本地站點(diǎn)都需要持有該請(qǐng)求的副本,從而浪費(fèi)了大量的內(nèi)存資源,造成效率低下等問題。
發(fā)明內(nèi)容
本申請(qǐng)?zhí)峁┮环N基于FIFO(先入先出)隊(duì)列的跨機(jī)房的數(shù)據(jù)同步方法,在保證具有較短的延遲時(shí)間的同時(shí),確保數(shù)據(jù)正確地傳輸至遠(yuǎn)程站點(diǎn)進(jìn)行更新。為此,本申請(qǐng)還要提供與之對(duì)應(yīng)的一種跨機(jī)房的數(shù)據(jù)同步系統(tǒng)。為解決上述技術(shù)問題,本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法,包括并行處理的請(qǐng)求處理方法和遠(yuǎn)程同步方法;所述請(qǐng)求處理方法中,本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)創(chuàng)建用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列;所述遠(yuǎn)程同步方法中,本地站點(diǎn)根據(jù)所述FIFO隊(duì)列中的索引鍵值,找到對(duì)應(yīng)的發(fā)生變更的數(shù)據(jù)內(nèi)容,向各遠(yuǎn)程站點(diǎn)發(fā)出同步指令。本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步系統(tǒng)包括:用于在本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)建立一個(gè)用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列的裝置;用于存儲(chǔ)所述FIFO隊(duì)列的裝置;用于根據(jù)所述FIFO隊(duì)列中的各項(xiàng)索引鍵值從本地站點(diǎn)找到對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并向各遠(yuǎn)程站點(diǎn)發(fā)出同步指令的裝置。本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法以及系統(tǒng)具有延遲時(shí)間短的特點(diǎn)。這是由于本地站點(diǎn)只需要將變更的數(shù)據(jù)的索引鍵值提交到一個(gè)FIFO隊(duì)列,就能向請(qǐng)求方返回處理結(jié)果,而該FIFO隊(duì)列是存儲(chǔ)在本地站點(diǎn)的,因而請(qǐng)求方的等待時(shí)間短。本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步系統(tǒng)及其方法中引入了一個(gè)FIFO隊(duì)列,它是由本地站點(diǎn)發(fā)生變更的數(shù)據(jù)的索引鍵值形成的,可視為本地站點(diǎn)與遠(yuǎn)程站點(diǎn)的數(shù)據(jù)同步任務(wù)列表。由于該隊(duì)列不保存實(shí)際發(fā)生變更的數(shù)據(jù)內(nèi)容,而只是發(fā)生變更的數(shù)據(jù)的索引鍵值,因而消耗的存儲(chǔ)資源、計(jì)算處理資源等都比較低。
圖1是跨機(jī)房的站點(diǎn)部署的示意圖;圖2是現(xiàn)有的一種跨機(jī)房的數(shù)據(jù)同步方法(同步數(shù)據(jù)傳輸)的流程圖;圖3是現(xiàn)有的另一種跨機(jī)房的數(shù)據(jù)同步方法(異步數(shù)據(jù)傳輸)的流程圖;圖4是圖3所示的跨機(jī)房的數(shù)據(jù)同步方法的出錯(cuò)示意圖5是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法的總示意圖;圖6是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法中處理請(qǐng)求方法的流程圖;圖7、圖8均是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法中數(shù)據(jù)同步方法的流程圖;圖9、圖10是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法中數(shù)據(jù)同步方法的示意圖;圖11是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步系統(tǒng)的總示意圖;圖12是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步系統(tǒng)的具體示意圖。
具體實(shí)施例方式請(qǐng)參閱圖5,本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法包括兩部分,第一部分是處理請(qǐng)求,第二部分是遠(yuǎn)程數(shù)據(jù)同步,這兩部分為并行處理,即可以同時(shí)處理。所述請(qǐng)求處理方法中,本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)創(chuàng)建用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列。所述索引鍵值優(yōu)選采用發(fā)生變更的數(shù)據(jù)的邏輯地址,即通過映射、對(duì)應(yīng)等關(guān)系可以唯一定位發(fā)生變更的數(shù)據(jù)的一種索引。例如,數(shù)據(jù)庫(kù)系統(tǒng)中所存儲(chǔ)的各條數(shù)據(jù)都至少包括主鍵ID和數(shù)據(jù)內(nèi)容兩個(gè)部分,每條數(shù)據(jù)的主鍵ID都不重復(fù)。本申請(qǐng)將發(fā)生變更的數(shù)據(jù)的主鍵ID作為索引鍵值。這其中的典型代表是Key-Value數(shù)據(jù)庫(kù),可將發(fā)生變更的數(shù)據(jù)的key作為索引鍵值。又如,文件系統(tǒng)中所存儲(chǔ)的各條數(shù)據(jù)都分別表示一個(gè)文件,其中包括有文件名(包含絕對(duì)路徑),而文件系統(tǒng)中的所有文件名(包含絕對(duì)路徑)都不重復(fù)。本申請(qǐng)將發(fā)生變更的數(shù)據(jù)的文件名作為索引鍵值。這同樣適用于采用分布式存儲(chǔ)的站點(diǎn)。如果站點(diǎn)采用分布式存儲(chǔ),并且不同服務(wù)器上的文件名可能重復(fù),還可以將發(fā)生變更的數(shù)據(jù)的服務(wù)器標(biāo)識(shí)和文件名(包含絕對(duì)路徑)共同作為索引鍵值。如果索引鍵值采用的是發(fā)生變更的數(shù)據(jù)的物理地址,即其在本地站點(diǎn)的物理存儲(chǔ)地址,那么需要注意的是:一旦有數(shù)據(jù)被刪除后,該數(shù)據(jù)的原物理地址不能被再次寫入;直到該數(shù)據(jù)在所有遠(yuǎn)程站點(diǎn)的對(duì)應(yīng)數(shù)據(jù)都被刪除后,該數(shù)據(jù)的原物理地址才可被再次寫入。所述FIFO隊(duì)列是由所述索引鍵值所組成的。所述FIFO隊(duì)列就是本地站點(diǎn)需要向各個(gè)遠(yuǎn)程站點(diǎn)進(jìn)行數(shù)據(jù)同步的任務(wù)列表,其中的每個(gè)索引鍵值就表示一項(xiàng)從本地站點(diǎn)到遠(yuǎn)程站點(diǎn)的數(shù)據(jù)同步任務(wù)。如果所述FIFO隊(duì)列不存在,則創(chuàng)建該FIFO隊(duì)列。所述遠(yuǎn)程同步方法中,本地站點(diǎn)根據(jù)所述FIFO隊(duì)列中的索引鍵值,找到對(duì)應(yīng)的發(fā)生變更的數(shù)據(jù)內(nèi)容,向各遠(yuǎn)程站點(diǎn)發(fā)出同步指令。所述同步指令包括增加、修改或刪除數(shù)據(jù)。請(qǐng)參閱圖6,這是所述處理請(qǐng)求的方法的一個(gè)實(shí)施例,包括如下步驟:第al步,請(qǐng)求方向本地站點(diǎn)提出請(qǐng)求。所述請(qǐng)求可以是數(shù)據(jù)的增加、修改或刪除等操作。第a2步,本地站點(diǎn)處理該請(qǐng)求,即增加、修改或刪除請(qǐng)求方所指定的數(shù)據(jù)。第a3步,當(dāng)本地站點(diǎn)成功處理完該請(qǐng)求后,為發(fā)生變更(即增加、修改或刪除)的數(shù)據(jù)創(chuàng)建一個(gè)索引鍵值,該索引鍵值用于唯一地定位到發(fā)生變更的數(shù)據(jù)。第a4步,本地站點(diǎn)將所述索引鍵值放到一個(gè)FIFO隊(duì)列的末尾。優(yōu)選地,在所述索弓丨鍵值被添加進(jìn)FIFO隊(duì)列后,本地站點(diǎn)向請(qǐng)求方返回“已成功處理完所述請(qǐng)求”的結(jié)果。請(qǐng)參閱圖7、圖8,這是所述數(shù)據(jù)同步的方法的一個(gè)實(shí)施例,包括如下步驟:
第bl步,本地站點(diǎn)從所述FIFO隊(duì)列的開頭讀取一個(gè)索引鍵值。如果成功讀取到一個(gè)索引鍵值,則進(jìn)入第b2步。由于FIFO隊(duì)列的自身特性,該索引鍵值被讀取后,就從所述FIFO隊(duì)列中被刪除掉。如果未讀取到索引鍵值,則表示所述FIFO隊(duì)列為空,進(jìn)一步表明當(dāng)前沒有數(shù)據(jù)同步任務(wù),返回第bl步。第b2步,本地站點(diǎn)根據(jù)所讀取的索引鍵值找到發(fā)生變更的數(shù)據(jù)。例如在數(shù)據(jù)庫(kù)中根據(jù)主鍵ID找到數(shù)據(jù)內(nèi)容,或者在文件系統(tǒng)中根據(jù)文件名(包含絕對(duì)路徑)找到文件內(nèi)容。如果發(fā)生變更的數(shù)據(jù)內(nèi)容為空,則表示發(fā)生變更的數(shù)據(jù)進(jìn)行的是刪除操作,則本地站點(diǎn)將該索引鍵值傳輸至遠(yuǎn)程站點(diǎn)并發(fā)出刪除對(duì)應(yīng)數(shù)據(jù)的同步指令。遠(yuǎn)程站點(diǎn)接收到該同步指令后,根據(jù)索引鍵值找到相應(yīng)的數(shù)據(jù),并將該數(shù)據(jù)內(nèi)容刪除。由于本地站點(diǎn)與各遠(yuǎn)程站點(diǎn)的數(shù)據(jù)存儲(chǔ)類型是一致的,因此在一個(gè)索引鍵值在各站點(diǎn)均可唯一地定位到相應(yīng)的數(shù)據(jù)內(nèi)容。如果發(fā)生變更的數(shù)據(jù)內(nèi)容不為空,則表示發(fā)生變更的數(shù)據(jù)進(jìn)行的是增加或修改操作,本地站點(diǎn)將該索引鍵值以及發(fā)生變更的數(shù)據(jù)內(nèi)容傳輸至遠(yuǎn)程站點(diǎn)并發(fā)出增加或修改對(duì)應(yīng)數(shù)據(jù)的同步指令。第b3步,本地站點(diǎn)等待遠(yuǎn)程站點(diǎn)的處理結(jié)果。如果遠(yuǎn)程站點(diǎn)返回“處理成功”的結(jié)果,則返回第bl步。如果遠(yuǎn)程站點(diǎn)返回“處理失敗”的結(jié)果,則本地站點(diǎn)將所讀取的索引鍵值重新放到所述FIFO隊(duì)列的末尾,并返回第bl步。本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法有效地解決了遠(yuǎn)程站點(diǎn)的數(shù)據(jù)同步的正確性問題。以下試舉二例說明。請(qǐng)參閱圖9,這是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法的一個(gè)實(shí)施例。在tl時(shí)刻,本地站點(diǎn)將數(shù)據(jù)Dl的值由a0改為al,同時(shí)向FIFO隊(duì)列的末尾增加數(shù)據(jù)Dl的索引鍵值DD1。在稍后的t2時(shí)刻,本地站點(diǎn)將數(shù)據(jù)Dl的值由al改為a2,同時(shí)又向FIFO隊(duì)列的末尾第二次增加數(shù)據(jù)Dl的索引鍵值DD1。在t3時(shí)刻,本地站點(diǎn)讀取第一次放入FIFO隊(duì)列中的索引鍵值DD1,找到數(shù)據(jù)Dl的值。t3時(shí)刻必然在tl時(shí)刻之后,該例假設(shè)t3時(shí)刻在t2時(shí)刻之前,則此時(shí)數(shù)據(jù)Dl的值為al。本地站點(diǎn)向其他遠(yuǎn)程站點(diǎn)發(fā)出消息修改數(shù)據(jù)Dl的值為al,直至得到各遠(yuǎn)程站點(diǎn)的修改成功的確認(rèn)。在稍后的t4時(shí)刻,本地站點(diǎn)讀取第二次放入FIFO隊(duì)列中的索引鍵值DD1,又找到數(shù)據(jù)Dl的值。t4時(shí)刻必然在t2時(shí)刻之后,此時(shí)數(shù)據(jù)Dl的值為a2,本地站點(diǎn)再向其他遠(yuǎn)程站點(diǎn)發(fā)出消息修改數(shù)據(jù)Dl的值至a2,直至得到各遠(yuǎn)程站點(diǎn)的修改成功的確認(rèn)。請(qǐng)參閱圖10,這是本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法的另一個(gè)實(shí)施例,與圖9的區(qū)別僅在于:t3時(shí)刻在t2時(shí)刻之后。此時(shí)本地站點(diǎn)向其他遠(yuǎn)程站點(diǎn)先后發(fā)出兩個(gè)消息,都是修改數(shù)據(jù)Dl的值為a2,也沒有出現(xiàn)數(shù)據(jù)同步出錯(cuò)的情況。由以上兩例可知,本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步方法,本地站點(diǎn)將發(fā)生變更的數(shù)據(jù)同步給遠(yuǎn)程站點(diǎn)的那一時(shí)刻,只關(guān)注該時(shí)刻所傳輸?shù)臄?shù)據(jù)的最后狀態(tài),而不關(guān)心該數(shù)據(jù)之前發(fā)生的任何變更,因而不會(huì)發(fā)生圖4所示的舊數(shù)據(jù)覆蓋新數(shù)據(jù)的情況。請(qǐng)參閱圖11,本申請(qǐng)跨機(jī)房的數(shù)據(jù)同步系統(tǒng)包括:用于在本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)建立一個(gè)用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列的裝置51 ;用于存儲(chǔ)所述FIFO隊(duì)列的裝置52 ;用于根據(jù)所述FIFO隊(duì)列中的各項(xiàng)索引鍵值從本地站點(diǎn)找到對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并向各遠(yuǎn)程站點(diǎn)發(fā)出同步指令的裝置53。上述跨機(jī)房的數(shù)據(jù)同步系統(tǒng)需要設(shè)置在圖1中的每個(gè)站點(diǎn)。此外,在各站點(diǎn)還都包括存儲(chǔ)有各條數(shù)據(jù)的數(shù)據(jù)庫(kù)550。請(qǐng)參閱圖12,所述裝置51進(jìn)一步包括:請(qǐng)求接收裝置511,用于接收請(qǐng)求方的數(shù)據(jù)處理的請(qǐng)求;所述數(shù)據(jù)處理請(qǐng)求可以是增加、修改或刪除等數(shù)據(jù)處理操作;請(qǐng)求處理裝置512,用于根據(jù)所接收請(qǐng)求對(duì)指定數(shù)據(jù)進(jìn)行處理;索引創(chuàng)建裝置513,用于為處理的數(shù)據(jù)創(chuàng)建索引鍵值;索引寫入裝置514,用于將所創(chuàng)建或接收的索引鍵值放到一個(gè)FIFO隊(duì)列的末尾,如果不存在該FIFO隊(duì)列,則創(chuàng)建一個(gè)FIFO隊(duì)列;操作結(jié)果發(fā)送裝置515,用于將對(duì)所述請(qǐng)求的操作結(jié)果發(fā)送給請(qǐng)求方。所述裝置52進(jìn)一步包括:FIFO存儲(chǔ)裝置520,用于存儲(chǔ)所述FIFO隊(duì)列;FIFO控制裝置521,用于在新數(shù)據(jù)寫入所述FIFO隊(duì)列時(shí),將新數(shù)據(jù)放在所述FIFO隊(duì)列的末尾,從所述FIFO隊(duì)列讀取數(shù)據(jù)時(shí),從所述FIFO隊(duì)列的開頭讀取數(shù)據(jù),并且在讀取完畢后,將已讀取的數(shù)據(jù)從所述FIFO隊(duì)列刪除。所述裝置53進(jìn)一步包括:索引讀取裝置531,用于從所述FIFO隊(duì)列的開頭讀取一個(gè)索引鍵值;數(shù)據(jù)內(nèi)容搜索裝置532,用于根據(jù)所讀取的索引鍵值找到對(duì)應(yīng)的數(shù)據(jù)內(nèi)容;數(shù)據(jù)內(nèi)容判斷裝置533,用于判斷所找到的數(shù)據(jù)內(nèi)容是否為空;指令發(fā)送裝置534,用于向遠(yuǎn)程站點(diǎn)發(fā)出對(duì)應(yīng)數(shù)據(jù)的同步指令;操作結(jié)果接收裝置535,用于接收遠(yuǎn)程站點(diǎn)反饋的對(duì)所述指令的操作結(jié)果;操作結(jié)果判斷裝置536,用于判斷所接收的操作結(jié)果是否為操作成功。以上僅為本申請(qǐng)的優(yōu)選實(shí)施例,并不用于限定本申請(qǐng)。對(duì)于本領(lǐng)域的技術(shù)人員來說,本申請(qǐng)可以有各種更改和變化。凡在本申請(qǐng)的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種跨機(jī)房的數(shù)據(jù)同步方法,其特征是,包括并行處理的請(qǐng)求處理方法和遠(yuǎn)程同步方法; 所述請(qǐng)求處理方法中,本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)創(chuàng)建用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列; 所述遠(yuǎn)程同步方法中,本地站點(diǎn)根據(jù)所述FIFO隊(duì)列中的索引鍵值,找到對(duì)應(yīng)的發(fā)生變更的數(shù)據(jù)內(nèi)容,向各遠(yuǎn)程站點(diǎn)發(fā)出同步指令。
2.根據(jù)權(quán)利要求1所述的跨機(jī)房的數(shù)據(jù)同步方法,其特征是,所述請(qǐng)求處理方法包括如下步驟: 第al步,本地站點(diǎn)獲取請(qǐng)求方提出的增加、修改或刪除數(shù)據(jù)的請(qǐng)求; 第a2步,本地站點(diǎn)處理該請(qǐng)求; 第a3步,當(dāng)本地站點(diǎn)成功處理完該請(qǐng)求后,為發(fā)生變更的數(shù)據(jù)創(chuàng)建一個(gè)索引鍵值,該索引鍵值用于唯一地定位到發(fā)生變更的數(shù)據(jù); 第a4步,本地站點(diǎn)將所述索引鍵值放到一個(gè)FIFO隊(duì)列的末尾,所述FIFO隊(duì)列由增加、修改或刪除的數(shù)據(jù)的索引鍵值所組成;如果該FIFO隊(duì)列不存在,則創(chuàng)建該FIFO隊(duì)列。
3.根據(jù)權(quán)利要求1所述的跨機(jī)房的數(shù)據(jù)同步方法,其特征是,所述遠(yuǎn)程同步方法包括如下步驟: 第bl步,本地站點(diǎn)從所述FIFO隊(duì)列的開頭讀取一個(gè)索引鍵值; 如果成功讀取到一個(gè)索引鍵值,則進(jìn)入第b2步; 如果未讀取到索引鍵值,則返回第bl步; 第b2步,本地站點(diǎn)根據(jù)所讀取的索引鍵值找到發(fā)生變更的數(shù)據(jù)內(nèi)容; 如果發(fā)生變更的數(shù)據(jù)內(nèi)容為空,則本地站點(diǎn)將該索引鍵值傳輸至遠(yuǎn)程站點(diǎn)并發(fā)出刪除的同步指令; 如果發(fā)生變更的數(shù)據(jù)內(nèi)容不為空,則本地站點(diǎn)將該索引鍵值、發(fā)生變更的數(shù)據(jù)內(nèi)容傳輸至遠(yuǎn)程站點(diǎn)并發(fā)出增加或修改的同步指令; 第b3步,本地站點(diǎn)等待遠(yuǎn)程站點(diǎn)的處理結(jié)果; 如果遠(yuǎn)程站點(diǎn)返回“處理成功”的結(jié)果,則返回第bl步; 如果遠(yuǎn)程站點(diǎn)返回“處理失敗”的結(jié)果,則本地站點(diǎn)將所讀取的索引鍵值重新放到所述FIFO隊(duì)列的末尾,并返回第bI步。
4.根據(jù)權(quán)利要求1所述的跨機(jī)房的數(shù)據(jù)同步方法,其特征是,所述索引鍵值為數(shù)據(jù)庫(kù)系統(tǒng)中每條數(shù)據(jù)的主鍵ID。
5.根據(jù)權(quán)利要求1所述的跨機(jī)房的數(shù)據(jù)同步方法,其特征是,所述索引鍵值為文件系統(tǒng)中每個(gè)文件的文件名,所述文件名包括絕對(duì)路徑。
6.根據(jù)權(quán)利要求1所述的跨機(jī)房的數(shù)據(jù)同步方法,其特征是,所述同步指令包括增加、修改或刪除數(shù)據(jù)的指令。
7.一種跨機(jī)房的數(shù)據(jù)同步系統(tǒng),其特征是,包括: 用于在本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)建立一個(gè)用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列的裝置; 用于存儲(chǔ)所述FIFO隊(duì)列的裝置; 用于根據(jù)所述FIFO隊(duì)列中的各項(xiàng)索引鍵值從本地站點(diǎn)找到對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并向各遠(yuǎn)程站點(diǎn)進(jìn)行數(shù)據(jù)同步的裝置。
8.根據(jù)權(quán)利要求7所述的跨機(jī)房的數(shù)據(jù)同步系統(tǒng),其特征是,所述用于在本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)建立一個(gè)用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列的裝置進(jìn)一步包括: 請(qǐng)求接收裝置,用于接收請(qǐng)求方增加、修改、或刪除數(shù)據(jù)的請(qǐng)求; 請(qǐng)求處理裝置,用于根據(jù)所接收的請(qǐng)求對(duì)指定數(shù)據(jù)進(jìn)行增加、修改或刪除; 索引創(chuàng)建裝置,用于為新增加、修改后或刪除掉的數(shù)據(jù)創(chuàng)建索引鍵值; 索引寫入裝置,用于將所創(chuàng)建的索引鍵值放到一個(gè)FIFO隊(duì)列的末尾,如果不存在該FIFO隊(duì)列則創(chuàng)建一個(gè)FIFO隊(duì)列; 操作結(jié)果發(fā)送裝置,用于將對(duì)所述請(qǐng)求的操作結(jié)果發(fā)送給請(qǐng)求方。
9.根據(jù)權(quán)利要求7所述的跨機(jī)房的數(shù)據(jù)同步系統(tǒng),其特征是,所述用于存儲(chǔ)所述FIFO隊(duì)列的裝置進(jìn)一步包括: FIFO存儲(chǔ)裝置,用于存儲(chǔ)所述FIFO隊(duì)列; FIFO控制裝置,用于在新數(shù)據(jù)寫入所述FIFO隊(duì)列時(shí)將新數(shù)據(jù)放在所述FIFO隊(duì)列的末尾,從所述FIFO隊(duì)列讀取數(shù)據(jù)時(shí)從所述FIFO隊(duì)列的開頭讀取數(shù)據(jù)、且在讀取完畢后將已讀取的數(shù)據(jù)從所述FIFO隊(duì)列刪除。
10.根據(jù)權(quán)利要求7所述的跨機(jī)房的數(shù)據(jù)同步系統(tǒng),其特征是,所述用于根據(jù)所述FIFO隊(duì)列中的各項(xiàng)索引鍵值從本地站點(diǎn)找到對(duì)應(yīng)的數(shù)據(jù)內(nèi)容,并向各遠(yuǎn)程站點(diǎn)進(jìn)行數(shù)據(jù)同步的裝置進(jìn)一步包括: 索引讀取裝置,用于從所述FIFO隊(duì)列的開頭讀取一個(gè)索引鍵值; 數(shù)據(jù)內(nèi)容搜索裝置,用于根據(jù)所讀取的索引鍵值找到對(duì)應(yīng)的數(shù)據(jù)內(nèi)容; 數(shù)據(jù)內(nèi)容判斷裝置,用于判斷所找到的數(shù)據(jù)內(nèi)容是否為空; 指令發(fā)送裝置,用于向遠(yuǎn)程站點(diǎn)發(fā)出增力口、修改、或刪除對(duì)應(yīng)數(shù)據(jù)的指令; 操作結(jié)果接收裝置,用于接收遠(yuǎn)程站點(diǎn)反饋的對(duì)所述指令的操作結(jié)果; 操作結(jié)果判斷裝置,用于判斷所接收的操作結(jié)果是否為操作成功。
全文摘要
本申請(qǐng)公開了一種跨機(jī)房的數(shù)據(jù)同步方法,包括并行處理的請(qǐng)求處理方法和遠(yuǎn)程同步方法。所述請(qǐng)求處理方法中,本地站點(diǎn)處理請(qǐng)求,并為發(fā)生變更的數(shù)據(jù)創(chuàng)建用于唯一定位的索引鍵值,并將所述索引鍵值添加到一個(gè)FIFO隊(duì)列。所述遠(yuǎn)程同步方法中,本地站點(diǎn)根據(jù)所述FIFO隊(duì)列中的索引鍵值,找到對(duì)應(yīng)的發(fā)生變更的數(shù)據(jù)內(nèi)容,向各遠(yuǎn)程站點(diǎn)發(fā)出同步指令。本申請(qǐng)還公開了與之對(duì)應(yīng)的跨機(jī)房的數(shù)據(jù)同步系統(tǒng)。本申請(qǐng)具有延遲時(shí)間短、等待時(shí)間短、消耗資源低、遠(yuǎn)程站點(diǎn)的數(shù)據(jù)同步始終保持正確的特點(diǎn)。
文檔編號(hào)H04L29/08GK103095769SQ201110344690
公開日2013年5月8日 申請(qǐng)日期2011年11月4日 優(yōu)先權(quán)日2011年11月4日
發(fā)明者楊成虎 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司