專利名稱:內(nèi)存數(shù)據(jù)備份方法及內(nèi)存數(shù)據(jù)備份系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲(chǔ)技術(shù),尤其涉及一種內(nèi)存數(shù)據(jù)備份方法及內(nèi)存數(shù)據(jù)備份系統(tǒng)。
背景技術(shù):
目前,內(nèi)存數(shù)據(jù)持久化存儲(chǔ)及備份主要采用純內(nèi)存存儲(chǔ)引擎,主要通過(guò)遠(yuǎn)程字典服務(wù)器(Redis, Remote Dictionary Server)以及關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(Mysql)等構(gòu)建主從結(jié)構(gòu)的內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng),采用主從復(fù)制方式實(shí)現(xiàn)多機(jī)冗余的高可靠性(HA,HighAvailability),其中,Mysql的主從復(fù)制是通過(guò)增量備份(binlog)方式實(shí)現(xiàn),binlog通過(guò)以二進(jìn)制文件方式記錄結(jié)構(gòu)化查詢語(yǔ)言(SQL, Structured Query Language)語(yǔ)句來(lái)進(jìn)行數(shù)據(jù)備份,所有數(shù)據(jù)更新在主服務(wù)器上執(zhí)行,在經(jīng)過(guò)預(yù)先設(shè)置的時(shí)間周期后,即定期轉(zhuǎn)儲(chǔ)(dump)模式,定期將更新的內(nèi)存數(shù)據(jù)批量寫入,主服務(wù)器將數(shù)據(jù)更新的binlog發(fā)送到從服 務(wù)器,以使從服務(wù)器進(jìn)行相同的數(shù)據(jù)更新,從而達(dá)到主從一致的目的,實(shí)現(xiàn)主服務(wù)器與從服務(wù)器的同步。Redis也采用主從方式進(jìn)行內(nèi)存數(shù)據(jù)備份,通過(guò)類似Mysql的binlog方式進(jìn)行主從同步,主從同步實(shí)現(xiàn)機(jī)制與Mysql的binlog同步機(jī)制類似,不同的是,Redis通過(guò)構(gòu)建不斷添加模式(A0F, Append Only Mode)文件進(jìn)行主從服務(wù)器同步。在進(jìn)行內(nèi)存數(shù)據(jù)備份時(shí),現(xiàn)有技術(shù)通常采用讀寫分離的數(shù)據(jù)備份方式,在內(nèi)存數(shù)據(jù)備份系統(tǒng)中,可以設(shè)置一臺(tái)主服務(wù)器,并配置有多臺(tái)從服務(wù)器,所有的數(shù)據(jù)更新業(yè)務(wù)邏輯訪問(wèn)主服務(wù)器,查詢業(yè)務(wù)邏輯僅訪問(wèn)從服務(wù)器,也稱為讀寫分離機(jī)制。圖I為現(xiàn)有內(nèi)存數(shù)據(jù)備份系統(tǒng)結(jié)構(gòu)示意圖。參見(jiàn)圖1,該內(nèi)存數(shù)據(jù)備份系統(tǒng)包括主服務(wù)器以及從服務(wù)器,較佳地,主服務(wù)器的數(shù)量為一臺(tái),從服務(wù)器的數(shù)量為一臺(tái)或多臺(tái)。數(shù)據(jù)更新業(yè)務(wù)邏輯將更新的數(shù)據(jù)寫入主服務(wù)器,主服務(wù)器通過(guò)binlog方式存儲(chǔ)更新的數(shù)據(jù),經(jīng)過(guò)預(yù)先設(shè)置的時(shí)間周期,將更新的數(shù)據(jù)通過(guò)binlog方式寫入從服務(wù)器,實(shí)現(xiàn)內(nèi)存數(shù)據(jù)備份,以使從服務(wù)器與主服務(wù)器保持?jǐn)?shù)據(jù)同步,查詢業(yè)務(wù)邏輯通過(guò)訪問(wèn)從服務(wù)器,獲取查詢所需的數(shù)據(jù)?,F(xiàn)有的內(nèi)存數(shù)據(jù)備份系統(tǒng),采用當(dāng)前主流的Mysql的讀寫分離機(jī)制方案,當(dāng)主服務(wù)器宕機(jī)或故障發(fā)生異常時(shí),根據(jù)預(yù)先設(shè)置的切換策略,觸發(fā)從多個(gè)從服務(wù)器中,選擇一個(gè)從服務(wù)器,并將其升級(jí)為主服務(wù)器,從而接替主服務(wù)器的業(yè)務(wù)功能,在發(fā)生異常的主服務(wù)器恢復(fù)正常后,再次觸發(fā)升級(jí)為主服務(wù)器的從服務(wù)器,使其注銷主服務(wù)器的業(yè)務(wù)功能,恢復(fù)為數(shù)據(jù)備份服務(wù)器。由上述可見(jiàn),現(xiàn)有的內(nèi)存數(shù)據(jù)備份系統(tǒng),當(dāng)主服務(wù)器宕機(jī)時(shí),由于主服務(wù)器與從服務(wù)器之間存在的binlog同步延遲,即在兩次時(shí)間周期期間發(fā)生的數(shù)據(jù)更新,由于主服務(wù)器還未能及時(shí)寫入從服務(wù)器,將會(huì)全部丟失,從而無(wú)法保證主服務(wù)器中所有更新數(shù)據(jù)的binlog都能夠同步到從服務(wù)器上,導(dǎo)致被升級(jí)為主服務(wù)器的從服務(wù)器中,其備份的數(shù)據(jù)不是最新的,與主服務(wù)器中的數(shù)據(jù)不同步,造成了部分更新數(shù)據(jù)的丟失,主從服務(wù)器同步性較差;對(duì)于Redis的主從同步方案,通過(guò)同步AOF文件實(shí)現(xiàn)主從服務(wù)器的數(shù)據(jù)同步,一方面,當(dāng)主服務(wù)器與從服務(wù)器之間的連接暫時(shí)中斷時(shí),需要從服務(wù)器將主服務(wù)器的所有AOF文件從頭再重新同步一遍,這對(duì)于日更新上億次的重負(fù)荷內(nèi)存數(shù)據(jù)備份系統(tǒng),完全同步AOF文件成為很重的負(fù)擔(dān),包括網(wǎng)絡(luò)流量上的和數(shù)據(jù)恢復(fù)時(shí)間上的負(fù)擔(dān);另一方面,同步AOF文件的數(shù)據(jù)同步機(jī)制,也存在與Mysql主從同步類似的問(wèn)題,當(dāng)主服務(wù)器宕機(jī)后,從服務(wù)器如果直接升級(jí)為主服務(wù)器,存在部分?jǐn)?shù)據(jù)丟失的問(wèn)題,使得主從服務(wù)器同步性較差。
發(fā)明內(nèi)容
本發(fā)明的實(shí)施例提供一種內(nèi)存數(shù)據(jù)備份方法,避免數(shù)據(jù)丟失、提升數(shù)據(jù)的同步性倉(cāng)泛。本發(fā)明的實(shí)施例還提供一種內(nèi)存數(shù)據(jù)備份系統(tǒng),避免數(shù)據(jù)丟失、提升數(shù)據(jù)的同步性能。為達(dá)到上述目的,本發(fā)明實(shí)施例提供的一種內(nèi)存數(shù)據(jù)備份方法,包括
接收數(shù)據(jù)更新命令,為數(shù)據(jù)更新命令分配游標(biāo);構(gòu)建數(shù)據(jù)更新命令與分配的游標(biāo)的映射關(guān)系,生成序列文件;將生成的序列文件輸出,以使數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù);接收數(shù)據(jù)更新成功信息,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。其中,所述為數(shù)據(jù)更新命令分配游標(biāo)包括判斷當(dāng)前接收的數(shù)據(jù)更新命令是否為接收的第一條數(shù)據(jù)更新命令,如果是,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息;如果不是,將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為接收數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息。其中,所述為數(shù)據(jù)更新命令分配游標(biāo)包括判斷預(yù)先存儲(chǔ)的不斷添加模式AOF文件中是否存在寫入的數(shù)據(jù)更新命令,如果不存在,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào);如果存在,獲取AOF文件中當(dāng)前已寫入的數(shù)據(jù)更新命令的游標(biāo)序列號(hào)信息,對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為接收的數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào)。其中,所述序列文件采用輕量級(jí)的數(shù)據(jù)交換格式JSON生成,并按照行進(jìn)行數(shù)據(jù)更新命令劃分。其中,在所述將生成的序列文件輸出的步驟之前,進(jìn)一步包括根據(jù)生成的序列文件,查詢存儲(chǔ)的映射關(guān)系,獲取與序列文件中游標(biāo)序列號(hào)相匹配的數(shù)據(jù)服務(wù)器信息,將數(shù)據(jù)服務(wù)器信息攜帶在序列文件中。其中,在所述將生成的序列文件輸出的步驟之后,進(jìn)一步包括存儲(chǔ)該序列文件并進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)更新成功信息,將當(dāng)前存儲(chǔ)的序列文件向所述數(shù)據(jù)服務(wù)器進(jìn)行重傳。其中,在所述更新數(shù)據(jù)的步驟之后,該方法進(jìn)一步包括數(shù)據(jù)服務(wù)器存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系;在下一時(shí)間周期,所述數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù)包括數(shù)據(jù)服務(wù)器接收序列文件,獲取序列文件中包含的游標(biāo)序列號(hào),判斷獲取的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào);如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,序列文件中包含中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該序列文件,向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送;
如果序列文件中包含的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù)。其中,所述方法進(jìn)一步包括監(jiān)測(cè)到數(shù)據(jù)服務(wù)器重啟服務(wù)后,獲取存儲(chǔ)的游標(biāo)序列號(hào),觸發(fā)向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送。一種內(nèi)存數(shù)據(jù)備份系統(tǒng),該內(nèi)存數(shù)據(jù)備份系統(tǒng)包括接收服務(wù)器、游標(biāo)分配器、分發(fā)器、游標(biāo)存儲(chǔ)器以及數(shù)據(jù)服務(wù)器,其中,接收服務(wù)器,用于接收數(shù)據(jù)更新命令,輸出至游標(biāo)分配器;游標(biāo)分配器,用于為依序接收的數(shù)據(jù)更新命令分配相應(yīng)的游標(biāo),構(gòu)建數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系,生成序列文件,輸出至分發(fā)器;分發(fā)器,用于接收游標(biāo)分配器輸出的序列文件,將序列文件中的數(shù)據(jù)更新命令向數(shù)據(jù)服務(wù)器輸出,在接收到數(shù)據(jù)更新成功信息后,將數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系輸出至游標(biāo)存儲(chǔ)器;游標(biāo)存儲(chǔ)器,用于以數(shù)據(jù)服務(wù)器為標(biāo)識(shí),存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系;數(shù)據(jù)服務(wù)器,用于根據(jù)接收的數(shù)據(jù)更新命令,更新數(shù)據(jù),在數(shù)據(jù)更新成功之后,向分發(fā)器返回?cái)?shù)據(jù)更新成功信息。所述游標(biāo)分配器包括接收模塊、判斷模塊、分配模塊、累加模塊、序列文件生成模塊以及發(fā)送模塊,其中,接收模塊,用于接收數(shù)據(jù)更新命令,輸出至判斷模塊;判斷模塊,用于判斷當(dāng)前接收的數(shù)據(jù)更新命令是否為接收的第一條數(shù)據(jù)更新命令,如果是,輸出至分配模塊,如果不是,輸出至累加模塊;分配模塊,用于為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊;累加模塊,用于將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為接收數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊;序列文件生成模塊,用于根據(jù)接收的游標(biāo)序列號(hào)信息,構(gòu)建數(shù)據(jù)更新命令與游標(biāo)序列號(hào)的映射關(guān)系,生成序列文件,輸出至發(fā)送模塊;發(fā)送模塊,用于將接收的序列文件輸出至分發(fā)器。所述游標(biāo)分配器包括接收模塊、判斷模塊、分配模塊、獲取模塊、累加模塊、序列文件生成模塊以及發(fā)送模塊,其中,
接收模塊,用于接收數(shù)據(jù)更新命令,輸出至判斷模塊;判斷模塊,用于判斷AOF文件中是否存在寫入的數(shù)據(jù)更新命令,如果不存在,通知分配模塊,如果存在,通知獲取模塊;分配模塊,用于接收通知,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào);獲取模塊,用于接收通知,獲取AOF文件中當(dāng)前已寫入的數(shù)據(jù)更新命令的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊;累加模塊,用于對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為接收的數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),輸出至序列文件生成模塊;
序列文件生成模塊,用于根據(jù)接收的游標(biāo)序列號(hào)信息,構(gòu)建數(shù)據(jù)更新命令與游標(biāo)序列號(hào)的映射關(guān)系,生成序列文件,輸出至發(fā)送模塊;發(fā)送模塊,用于將接收的序列文件輸出至分發(fā)器。所述分發(fā)器包括序列文件分發(fā)模塊以及游標(biāo)信息處理模塊,其中,序列文件分發(fā)模塊,用于接收游標(biāo)分配器輸出的序列文件,將序列文件中的數(shù)據(jù)更新命令或序列文件向數(shù)據(jù)服務(wù)器輸出;游標(biāo)信息處理模塊,用于在接收到數(shù)據(jù)更新成功信息后,將數(shù)據(jù)更新成功對(duì)應(yīng)的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系輸出至游標(biāo)存儲(chǔ)器。所述分發(fā)器進(jìn)一步包括序列文件處理模塊,用于接收游標(biāo)分配器輸出的序列文件,查詢游標(biāo)存儲(chǔ)器,獲取與序列文件中游標(biāo)序列號(hào)相匹配的數(shù)據(jù)服務(wù)器信息,將數(shù)據(jù)服務(wù)器信息向序列文件分發(fā)模塊輸出,以使序列文件分發(fā)模塊根據(jù)接收的數(shù)據(jù)服務(wù)器信息進(jìn)行輸出。所述分發(fā)器進(jìn)一步包括計(jì)時(shí)模塊,用于在輸出序列文件后,存儲(chǔ)該序列文件并進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)更新成功信息,將當(dāng)前存儲(chǔ)的序列文件向所述數(shù)據(jù)服務(wù)器進(jìn)行重傳。所述游標(biāo)存儲(chǔ)器包括游標(biāo)存儲(chǔ)區(qū)劃分模塊以及游標(biāo)存儲(chǔ)模塊,其中,游標(biāo)存儲(chǔ)區(qū)劃分模塊,用于以數(shù)據(jù)服務(wù)器為標(biāo)識(shí)劃分游標(biāo)存儲(chǔ)區(qū),以使每一數(shù)據(jù)服務(wù)器對(duì)應(yīng)一塊游標(biāo)存儲(chǔ)子區(qū);游標(biāo)存儲(chǔ)模塊,用于根據(jù)數(shù)據(jù)更新成功信息攜帶的數(shù)據(jù)服務(wù)器信息,在相應(yīng)的游標(biāo)存儲(chǔ)子區(qū)中,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。所述游標(biāo)存儲(chǔ)器進(jìn)一步包括游標(biāo)更新模塊,用于遍歷游標(biāo)存儲(chǔ)模塊,獲取映射關(guān)系中的最大游標(biāo)序列號(hào),刪除除最大游標(biāo)序列號(hào)對(duì)應(yīng)的映射關(guān)系外的其他游標(biāo)序列號(hào)對(duì)應(yīng)的映射關(guān)系。所述數(shù)據(jù)服務(wù)器包括數(shù)據(jù)更新模塊以及成功信息確認(rèn)模塊,其中,數(shù)據(jù)更新模塊,用于根據(jù)接收的數(shù)據(jù)更新命令,更新數(shù)據(jù);成功信息確認(rèn)模塊,用于在數(shù)據(jù)更新成功之后,向分發(fā)器返回?cái)?shù)據(jù)更新成功信息。所述數(shù)據(jù)服務(wù)器進(jìn)一步包括游標(biāo)存儲(chǔ)模塊以及匹配模塊,其中,游標(biāo)存儲(chǔ)模塊,用于存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系;匹配模塊,用于接收序列文件,獲取序列文件中包含的游標(biāo)序列號(hào),判斷獲取的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào);
如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,序列文件中包含中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該序列文件,向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送;如果序列文件中包含的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,將該序列文件輸出至數(shù)據(jù)更新模塊。所述數(shù)據(jù)服務(wù)器進(jìn)一步包括數(shù)據(jù)更新請(qǐng)求模塊,用于在數(shù)據(jù)服務(wù)器重啟服務(wù)后,獲取游標(biāo)存儲(chǔ)模塊存儲(chǔ)的游標(biāo)序列號(hào),觸發(fā)匹配模塊向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送。所述序列文件采用輕量級(jí)的數(shù)據(jù)交換格式JSON生成,并按照行進(jìn)行數(shù)據(jù)更新命令劃分。 由上述技術(shù)方案可見(jiàn),本發(fā)明實(shí)施例提供的一種內(nèi)存數(shù)據(jù)備份方法及內(nèi)存數(shù)據(jù)備份系統(tǒng),接收數(shù)據(jù)更新命令,為數(shù)據(jù)更新命令分配游標(biāo);構(gòu)建數(shù)據(jù)更新命令與分配的游標(biāo)的映射關(guān)系,生成序列文件;將生成的序列文件輸出,以使數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù);接收數(shù)據(jù)更新成功信息,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。這樣,通過(guò)為數(shù)據(jù)更新命令分配游標(biāo),并實(shí)時(shí)地進(jìn)行數(shù)據(jù)更新命令分發(fā),有效提升了數(shù)據(jù)的同步性能,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系以便獲知各數(shù)據(jù)服務(wù)器更新數(shù)據(jù)的信息,避免了當(dāng)數(shù)據(jù)服務(wù)器故障或宕機(jī)時(shí),造成兩次時(shí)間周期期間發(fā)生的數(shù)據(jù)更新引起的數(shù)據(jù)丟失。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,以下將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹。顯而易見(jiàn)地,以下描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員而言,還可以根據(jù)這些附圖所示實(shí)施例得到其它的實(shí)施例及其附圖。圖I為現(xiàn)有內(nèi)存數(shù)據(jù)備份系統(tǒng)結(jié)構(gòu)示意圖。圖2為本發(fā)明實(shí)施例內(nèi)存數(shù)據(jù)備份系統(tǒng)結(jié)構(gòu)示意圖。圖3為本發(fā)明實(shí)施例的內(nèi)存數(shù)據(jù)備份方法流程示意圖。
具體實(shí)施例方式以下將結(jié)合附圖對(duì)本發(fā)明各實(shí)施例的技術(shù)方案進(jìn)行清楚、完整的描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明的一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所得到的所有其它實(shí)施例,都屬于本發(fā)明所保護(hù)的范圍?,F(xiàn)有的內(nèi)存數(shù)據(jù)備份系統(tǒng),對(duì)于通常有著主從角色的主從服務(wù)器來(lái)說(shuō),主服務(wù)器負(fù)責(zé)維護(hù)binlog的寫入和binlog的發(fā)送,主服務(wù)器通過(guò)binlog方式存儲(chǔ)更新的數(shù)據(jù),經(jīng)過(guò)預(yù)先設(shè)置的時(shí)間周期,將更新的數(shù)據(jù)通過(guò)binlog方式寫入從服務(wù)器,以使從服務(wù)器與主服務(wù)器保持?jǐn)?shù)據(jù)同步,由于binlog和主服務(wù)器集成在一起,當(dāng)主服務(wù)器宕機(jī)時(shí),由于用戶無(wú)法通過(guò)主服務(wù)器進(jìn)行數(shù)據(jù)更新,需要及時(shí)升級(jí)一個(gè)從服務(wù)器來(lái)充當(dāng)主服務(wù)器,從而響應(yīng)用戶的數(shù)據(jù)更新請(qǐng)求,但由于主服務(wù)器與從服務(wù)器之間存在的binlog同步延遲,造成了部分更新數(shù)據(jù)的丟失,數(shù)據(jù)的安全性不高,主從服務(wù)器同步性較差。本發(fā)明實(shí)施例中,考慮取消現(xiàn)有數(shù)據(jù)備份上的主從備份機(jī)制,在內(nèi)存數(shù)據(jù)備份系統(tǒng)中,數(shù)據(jù)服務(wù)器(包括主服務(wù)器以及從服務(wù)器)之間為對(duì)等關(guān)系,每一臺(tái)數(shù)據(jù)服務(wù)器既是主服務(wù)器,也是從服務(wù)器;同時(shí),考慮對(duì)更新的數(shù)據(jù)進(jìn)行順序化存儲(chǔ),并為順序存儲(chǔ)的數(shù)據(jù)分配游標(biāo)(ID),并將binlog進(jìn)行服務(wù)化,獨(dú)立于數(shù)據(jù)服務(wù),提供單獨(dú)的binlog服務(wù),所有的數(shù)據(jù)服務(wù)器同時(shí)接收binlog進(jìn)行數(shù)據(jù)更新,以達(dá)到數(shù)據(jù)同步的目的。也就是說(shuō),所有的數(shù)據(jù)更新命令都會(huì)直接發(fā)往內(nèi)存數(shù)據(jù)備份系統(tǒng),進(jìn)行數(shù)據(jù)更新命令的持久保存和分配唯一游標(biāo),該游標(biāo)用作后端數(shù)據(jù)服務(wù)器執(zhí)行命令的游標(biāo),數(shù)據(jù)服務(wù)器和分發(fā)數(shù)據(jù)更新命令的服務(wù)器分別記錄游標(biāo)值,并進(jìn)行游標(biāo)交換,以防止數(shù)據(jù)更新命令的重復(fù)執(zhí)行。圖2為本發(fā)明實(shí)施例內(nèi)存數(shù)據(jù)備份系統(tǒng)結(jié)構(gòu)示意圖。參見(jiàn)圖2,該系統(tǒng)包括接收服務(wù)器、游標(biāo)分配器、分發(fā)器、游標(biāo)存儲(chǔ)器以及數(shù)據(jù)服務(wù)器,其中,
接收服務(wù)器,用于接收數(shù)據(jù)更新命令,輸出至游標(biāo)分配器;本發(fā)明實(shí)施例中,用戶或數(shù)據(jù)更新業(yè)務(wù)邏輯在需要對(duì)內(nèi)存數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行更新時(shí),向接收服務(wù)器發(fā)送數(shù)據(jù)更新命令。游標(biāo)分配器,用于為依序接收的數(shù)據(jù)更新命令分配相應(yīng)的游標(biāo),構(gòu)建數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系,生成序列文件,輸出至分發(fā)器;本發(fā)明實(shí)施例中,基于用戶或數(shù)據(jù)更新業(yè)務(wù)邏輯所提交的數(shù)據(jù)更新命令總會(huì)有先后的順序,并依序執(zhí)行接收的數(shù)據(jù)更新名命令,因而,可以按照數(shù)據(jù)更新命令提交或接收的先后順序,為數(shù)據(jù)更新命令分配用于標(biāo)識(shí)其執(zhí)行順序的游標(biāo)。較佳地。游標(biāo)信息為游標(biāo)序列號(hào)。當(dāng)然,實(shí)際應(yīng)用中,游標(biāo)信息也可以是其它的信息,只要保證為每個(gè)數(shù)據(jù)更新命令設(shè)置的游標(biāo)信息互不相同即可,即只要能夠唯一標(biāo)識(shí)數(shù)據(jù)更新命令即可。例如,可以按照接收到的數(shù)據(jù)更新命令的順序進(jìn)行分配,游標(biāo)序列號(hào)從I開(kāi)始,最大為64位無(wú)符號(hào)長(zhǎng)整型?,F(xiàn)有技術(shù)中,對(duì)于Mysql的binlog和Redis的AOF文件,都是二進(jìn)制文件,無(wú)法查看數(shù)據(jù)更新命令內(nèi)容。本發(fā)明實(shí)施例中,考慮采用輕量級(jí)的數(shù)據(jù)交換格式,即對(duì)象聲明(JS0N,JavaScript Object Notation)生成序列文件,以JSON格式的明文字符串生成數(shù)據(jù)更新命令文件。JSON格式是一種簡(jiǎn)便的數(shù)據(jù)交換格式,能夠在服務(wù)器之間交換數(shù)據(jù),采用壓縮格式以及完全獨(dú)立于語(yǔ)言的文本格式,以文字為基礎(chǔ),易于閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。關(guān)于JSON的詳細(xì)描述,具體可參見(jiàn)相關(guān)技術(shù)文獻(xiàn),在此不再贅述。較佳地,在以JSON格式生成的數(shù)據(jù)更新命令文件中,按照行進(jìn)行數(shù)據(jù)更新命令劃分,每一行對(duì)應(yīng)一條數(shù)據(jù)更新命令。這樣,可以方便地對(duì)數(shù)據(jù)更新命令進(jìn)行統(tǒng)計(jì)和追蹤,方便應(yīng)用調(diào)試。分發(fā)器,用于接收游標(biāo)分配器輸出的序列文件,將序列文件中的數(shù)據(jù)更新命令向數(shù)據(jù)服務(wù)器輸出,在接收到數(shù)據(jù)更新成功信息后,將數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系輸出至游標(biāo)存儲(chǔ)器;本發(fā)明實(shí)施例中,內(nèi)存數(shù)據(jù)備份系統(tǒng)分為數(shù)據(jù)接收服務(wù)器端和數(shù)據(jù)分發(fā)器端,接收服務(wù)器端監(jiān)聽(tīng)網(wǎng)絡(luò)端口,并將接收到的數(shù)據(jù)更新命令輸出至游標(biāo)分配器進(jìn)行游標(biāo)分配和磁盤寫入,生成序列文件。游標(biāo)存儲(chǔ)器,用于以數(shù)據(jù)服務(wù)器為標(biāo)識(shí),存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系;數(shù)據(jù)服務(wù)器,用于根據(jù)接收的數(shù)據(jù)更新命令,更新數(shù)據(jù),在數(shù)據(jù)更新成功之后,向分發(fā)器返回?cái)?shù)據(jù)更新成功信息。本發(fā)明實(shí)施例中,數(shù)據(jù)服務(wù)器的數(shù)量為一臺(tái)或多臺(tái)。數(shù)據(jù)分發(fā)器端根據(jù)預(yù)先設(shè)置的分發(fā)配置策略和所記錄的游標(biāo)值,向目標(biāo)服務(wù)器(數(shù)據(jù)服務(wù)器)分發(fā)所接收到的數(shù)據(jù)更新命令。其中,游標(biāo)分配器包括接收模塊、判斷模塊、分配模塊、累加模塊、序列文件生成模塊以及發(fā)送模塊(圖中未示出),其中,接收模塊,用于接收數(shù)據(jù)更新命令,輸出至判斷模塊;判斷模塊,用于判斷當(dāng)前接收的數(shù)據(jù)更新命令是否為接收的第一條數(shù)據(jù)更新命令,如果是,輸出至分配模塊,如果不是,輸出至累加模塊;分配模塊,用于為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊;累加模塊,用于將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為接收數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊;序列文件生成模塊,用于根據(jù)接收的游標(biāo)序列號(hào)信息,構(gòu)建數(shù)據(jù)更新命令與游標(biāo)序列號(hào)的映射關(guān)系,生成序列文件,輸出至發(fā)送模塊;發(fā)送模塊,用于將接收的序列文件輸出至分發(fā)器。當(dāng)然,實(shí)際應(yīng)用中,游標(biāo)分配器也可以包括接收模塊、判斷模塊、分配模塊、獲取模塊、累加模塊、序列文件生成模塊以及發(fā)送模塊(圖中未示出),其中,接收模塊,用于接收數(shù)據(jù)更新命令,輸出至判斷模塊;判斷模塊,用于判斷AOF文件中是否存在寫入的數(shù)據(jù)更新命令,如果不存在,通知分配模塊,如果存在,通知獲取模塊;分配模塊,用于接收通知,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào);獲取模塊,用于接收通知,獲取AOF文件中當(dāng)前已寫入的數(shù)據(jù)更新命令的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊;累加模塊,用于對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為接收的數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),輸出至序列文件生成模塊;序列文件生成模塊,用于根據(jù)接收的游標(biāo)序列號(hào)信息,構(gòu)建數(shù)據(jù)更新命令與游標(biāo)序列號(hào)的映射關(guān)系,生成序列文件,輸出至發(fā)送模塊;發(fā)送模塊,用于將接收的序列文件輸出至分發(fā)器。分發(fā)器包括序列文件分發(fā)模塊以及游標(biāo)信息處理模塊(圖中未示出),其中,序列文件分發(fā)模塊,用于接收游標(biāo)分配器輸出的序列文件,將序列文件中的數(shù)據(jù)更新命令或序列文件向數(shù)據(jù)服務(wù)器輸出;游標(biāo)信息處理模塊,用于在接收到數(shù)據(jù)更新成功信息后,將數(shù)據(jù)更新成功對(duì)應(yīng)的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系輸出至游標(biāo)存儲(chǔ)器。
實(shí)際應(yīng)用中,由于各數(shù)據(jù)服務(wù)器處理數(shù)據(jù)更新命令的速度不同,以及在線狀態(tài)不同,使得各數(shù)據(jù)服務(wù)器中,根據(jù)數(shù)據(jù)更新命令進(jìn)行數(shù)據(jù)更新的數(shù)據(jù)量也不同,即各數(shù)據(jù)服務(wù)器相應(yīng)更新的數(shù)據(jù)并不保持實(shí)時(shí)同步,例如,當(dāng)某一數(shù)據(jù)服務(wù)器發(fā)生異常,則在異常期間內(nèi),不能進(jìn)行數(shù)據(jù)更新,而其它運(yùn)行正常的數(shù)據(jù)服務(wù)器可以進(jìn)行數(shù)據(jù)更新,導(dǎo)致該數(shù)據(jù)服務(wù)器與其它數(shù)據(jù)服務(wù)器中的數(shù)據(jù)不同步。
因而,分發(fā)器可以進(jìn)一步包括序列文件處理模塊,用于接收游標(biāo)分配器輸出的序列文件,查詢游標(biāo)存儲(chǔ)器,獲取與序列文件中游標(biāo)序列號(hào)相匹配的數(shù)據(jù)服務(wù)器信息,將數(shù)據(jù)服務(wù)器信息向序列文件分發(fā)模塊輸出,以使序列文件分發(fā)模塊根據(jù)接收的數(shù)據(jù)服務(wù)器信息進(jìn)行輸出。 本發(fā)明實(shí)施例中,游標(biāo)存儲(chǔ)器存儲(chǔ)有各數(shù)據(jù)服務(wù)器進(jìn)行數(shù)據(jù)更新成功的游標(biāo)序列號(hào)信息,如果序列文件中的游標(biāo)序列號(hào)大于游標(biāo)存儲(chǔ)器存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)單位閾值,表示該數(shù)據(jù)服務(wù)器可以處理該序列文件。實(shí)際應(yīng)用中,如果分發(fā)器在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)更新成功信息,則可以認(rèn)為是已發(fā)送的序列文件出現(xiàn)了異常,需要重新發(fā)送序列文件。因而,該分發(fā)器還可以進(jìn)一步包括計(jì)時(shí)模塊,用于在輸出序列文件后,存儲(chǔ)該序列文件并進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)更新成功信息,將當(dāng)前存儲(chǔ)的序列文件向所述數(shù)據(jù)服務(wù)器進(jìn)行重傳。本發(fā)明實(shí)施例中,序列文件分發(fā)模塊在發(fā)送序列文件后,由于與數(shù)據(jù)服務(wù)器之間的通信異常,或者,數(shù)據(jù)服務(wù)器的應(yīng)用程序接收到序列文件后,在處理消息的過(guò)程中由于異常,或者,數(shù)據(jù)服務(wù)器的應(yīng)用程序接收到序列文件后,在成功處理消息后,返回?cái)?shù)據(jù)更新成功信息,由于與分發(fā)器之間的通信異常,都將使分發(fā)器接收不到數(shù)據(jù)更新成功信息。游標(biāo)存儲(chǔ)器包括游標(biāo)存儲(chǔ)區(qū)劃分模塊以及游標(biāo)存儲(chǔ)模塊(圖中未示出),其中,游標(biāo)存儲(chǔ)區(qū)劃分模塊,用于以數(shù)據(jù)服務(wù)器為標(biāo)識(shí)劃分游標(biāo)存儲(chǔ)區(qū),以使每一數(shù)據(jù)服務(wù)器對(duì)應(yīng)一塊游標(biāo)存儲(chǔ)子區(qū);游標(biāo)存儲(chǔ)模塊,用于根據(jù)數(shù)據(jù)更新成功信息攜帶的數(shù)據(jù)服務(wù)器信息,在相應(yīng)的游標(biāo)存儲(chǔ)子區(qū)中,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。本發(fā)明實(shí)施例中,為了有效降低磁盤中持久化存儲(chǔ)的數(shù)據(jù)量,游標(biāo)存儲(chǔ)器還可以進(jìn)一步包括游標(biāo)更新模塊,用于遍歷游標(biāo)存儲(chǔ)模塊,獲取映射關(guān)系中的最大游標(biāo)序列號(hào),刪除除最大游標(biāo)序列號(hào)對(duì)應(yīng)的映射關(guān)系外的其他游標(biāo)序列號(hào)對(duì)應(yīng)的映射關(guān)系。數(shù)據(jù)服務(wù)器包括數(shù)據(jù)更新模塊以及成功信息確認(rèn)模塊(圖中未示出),其中,數(shù)據(jù)更新模塊,用于根據(jù)接收的數(shù)據(jù)更新命令,更新數(shù)據(jù);成功信息確認(rèn)模塊,用于在數(shù)據(jù)更新成功之后,向分發(fā)器返回?cái)?shù)據(jù)更新成功信息。本發(fā)明實(shí)施例,為了避免與序列文件分發(fā)模塊之間的通信異常引起的數(shù)據(jù)更新混亂的情形,數(shù)據(jù)服務(wù)器還可以進(jìn)一步包括游標(biāo)存儲(chǔ)模塊以及匹配模塊,其中,游標(biāo)存儲(chǔ)模塊,用于存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系;匹配模塊,用于接收序列文件,獲取序列文件中包含的游標(biāo)序列號(hào),判斷獲取的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào);
如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,序列文件中包含中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該序列文件,向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送;如果序列文件中包含的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,將該序列文件輸出至數(shù)據(jù)更新模塊。本發(fā)明實(shí)施例中,如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,表明該數(shù)據(jù)服務(wù)器上一次向分發(fā)器返回的數(shù)據(jù)更新成功信息沒(méi)有成功到分發(fā)器,分發(fā)器在計(jì)時(shí)超時(shí)后重傳了該序列文件,而該序列文件已被該數(shù)據(jù)服務(wù)器成功處理,并記錄了處理成功的信息。如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位, 表明在分發(fā)器或游標(biāo)分配器處,對(duì)發(fā)送的序列文件進(jìn)行了更改,將導(dǎo)致序列文件不能按序進(jìn)行處理,因而,需要通知分發(fā)器或游標(biāo)分配器,從數(shù)據(jù)服務(wù)器已成功處理的數(shù)據(jù)后,重新按序發(fā)送數(shù)據(jù)更新命令。如果序列文件中包含的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,表明接收流程正確。當(dāng)然,實(shí)際應(yīng)用中,數(shù)據(jù)服務(wù)器在發(fā)生異常,并從異常中恢復(fù)正常后,可以主動(dòng)向游標(biāo)分配器發(fā)起數(shù)據(jù)更新請(qǐng)求,該數(shù)據(jù)服務(wù)器進(jìn)一步包括數(shù)據(jù)更新請(qǐng)求模塊,用于在數(shù)據(jù)服務(wù)器重啟服務(wù)后,獲取游標(biāo)存儲(chǔ)模塊存儲(chǔ)的游標(biāo)序列號(hào),觸發(fā)匹配模塊向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送。本發(fā)明實(shí)施例的內(nèi)存數(shù)據(jù)備份系統(tǒng),在自有開(kāi)發(fā)的純內(nèi)存存儲(chǔ)服務(wù)的多機(jī)冗余(HA)和數(shù)據(jù)恢復(fù)解決方案中,表現(xiàn)非常好。由上述可見(jiàn),本發(fā)明實(shí)施例的內(nèi)存數(shù)據(jù)備份系統(tǒng),與現(xiàn)有主從復(fù)制備份數(shù)據(jù)的技術(shù)方案相比,通過(guò)Binlog服務(wù)獨(dú)立化,數(shù)據(jù)更新命令的接收端和分發(fā)端進(jìn)行分離設(shè)計(jì),使得系統(tǒng)后端的任何數(shù)據(jù)服務(wù)器發(fā)生異常,都不會(huì)影響到數(shù)據(jù)服務(wù),現(xiàn)有的主從復(fù)制備份數(shù)據(jù)同步技術(shù)方案中,由于主服務(wù)器的故障所帶來(lái)的影響更大,因而,主服務(wù)器的安全性要求往往比從服務(wù)器的安全性要求更高,但在本發(fā)明實(shí)施例中,由于所有的數(shù)據(jù)服務(wù)器都是對(duì)等的,而且,通過(guò)實(shí)時(shí)的數(shù)據(jù)更新命令分發(fā),當(dāng)數(shù)據(jù)服務(wù)器故障或宕機(jī)時(shí),不會(huì)造成兩次時(shí)間周期期間發(fā)生的數(shù)據(jù)更新,由于主服務(wù)器器未能及時(shí)寫入從服務(wù)器引起的數(shù)據(jù)丟失,因而,避免了主從服務(wù)器的切換所帶來(lái)的binlog丟失問(wèn)題;進(jìn)一步地,數(shù)據(jù)服務(wù)器在故障或宕機(jī)后重新啟動(dòng),會(huì)按照該數(shù)據(jù)服務(wù)器相應(yīng)更新的游標(biāo)值接續(xù)進(jìn)行數(shù)據(jù)更新,不存在Redis主從同步中斷需要完全重新同步所有AOF文件的問(wèn)題;此外,對(duì)于Mysql的binlog和Redis的AOF文件,都是二進(jìn)制文件,無(wú)法查看數(shù)據(jù)更新命令內(nèi)容,本發(fā)明實(shí)施例中,創(chuàng)新使用JSON格式的明文字符串作為命令體,按照行進(jìn)行數(shù)據(jù)更新命令劃分,可以方便地對(duì)數(shù)據(jù)更新命令進(jìn)行統(tǒng)計(jì)和追蹤,方便應(yīng)用調(diào)試。圖3為本發(fā)明實(shí)施例的內(nèi)存數(shù)據(jù)備份方法流程示意圖。參見(jiàn)圖3,該流程包括步驟301,接收數(shù)據(jù)更新命令,為數(shù)據(jù)更新命令分配游標(biāo);本步驟中,基于提交的數(shù)據(jù)更新命令有先后順序的特點(diǎn),因而,可以按照數(shù)據(jù)更新命令提交或接收的先后順序,為數(shù)據(jù)更新命令分配用于標(biāo)識(shí)其執(zhí)行順序的游標(biāo)。例如,可以按照接收到的數(shù)據(jù)更新命令的順序進(jìn)行分配,Id從I開(kāi)始,最大為64位無(wú)符號(hào)長(zhǎng)整型。為數(shù)據(jù)更新命令分配游標(biāo)包括判斷當(dāng)前接收的數(shù)據(jù)更新命令是否為接收的第一條數(shù)據(jù)更新命令,如果是,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息;如果不是,將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為接收數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息。本步驟中,游標(biāo)分配器判斷接收的數(shù)據(jù)更新命令是否為第一條數(shù)據(jù)更新命令,如果是,將初始游標(biāo)序列號(hào)分配給該數(shù)據(jù)更新命令,并記錄該分配的游標(biāo)序列號(hào)信息,后續(xù)如果接收到新數(shù)據(jù)更新命令,則將接收的前一數(shù)據(jù)更新命令的游標(biāo)序列號(hào)進(jìn)行累加,作為當(dāng)前新接收數(shù)據(jù)更新命令的游標(biāo)序列號(hào)。例如,將游標(biāo)序列號(hào)依序加1,如果設(shè)置的第一條數(shù)據(jù)更新命令對(duì)應(yīng)的初始游標(biāo)序列號(hào)為1,則后續(xù)接收的數(shù)據(jù)更新命令對(duì)應(yīng)的游標(biāo)序列號(hào),依序?yàn)?、3、4、…。 當(dāng)然,實(shí)際應(yīng)用中,為數(shù)據(jù)更新命令分配游標(biāo)也可以包括判斷預(yù)先存儲(chǔ)的AOF文件中是否存在寫入的數(shù)據(jù)更新命令,如果不存在,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào);如果存在,獲取AOF文件中當(dāng)前已寫入的數(shù)據(jù)更新命令的游標(biāo)序列號(hào)信息,對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為接收的數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào)。本步驟中,游標(biāo)分配器在接收到數(shù)據(jù)更新命令時(shí),查詢寫入磁盤的AOF文件中是否有寫入的數(shù)據(jù)更新命令,如果沒(méi)有,表明當(dāng)前接收到的數(shù)據(jù)更新命令為第一條數(shù)據(jù)更新命令;如果寫入磁盤的AOF文件中有寫入的數(shù)據(jù)更新命令,則可以根據(jù)最近一次寫入的數(shù)據(jù)更新命令中攜帶的游標(biāo)序列號(hào)信息,為當(dāng)前接收到的數(shù)據(jù)更新命令設(shè)置相應(yīng)的游標(biāo)序列號(hào)。步驟302,構(gòu)建數(shù)據(jù)更新命令與分配的游標(biāo)的映射關(guān)系,生成序列文件;本步驟中,建立數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系并存儲(chǔ)。具體來(lái)說(shuō),將接收的數(shù)據(jù)更新命令順序?qū)懭氪疟P中的序列文件,并將順序值(游標(biāo)序列號(hào))從I開(kāi)始,依序自增,并將依序自增的序號(hào)作為依序接收的數(shù)據(jù)更新命令的游標(biāo),從而形成一一映射關(guān)系。本發(fā)明實(shí)施例中,較佳地,采用輕量級(jí)的數(shù)據(jù)交換格式JSON生成序列文件,并按照行進(jìn)行數(shù)據(jù)更新命令劃分。步驟303,將生成的序列文件輸出,以使數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù);本步驟中,在將生成的序列文件輸出的步驟之前,還可以進(jìn)一步包括根據(jù)生成的序列文件,查詢存儲(chǔ)的映射關(guān)系,獲取與序列文件中游標(biāo)序列號(hào)相匹配的數(shù)據(jù)服務(wù)器信息,將數(shù)據(jù)服務(wù)器信息攜帶在序列文件中。較佳地,在將生成的序列文件輸出的步驟之后,還可以進(jìn)一步包括存儲(chǔ)該序列文件并進(jìn)行計(jì)時(shí);如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)更新成功信息,將當(dāng)前存儲(chǔ)的序列文件向所述數(shù)據(jù)服務(wù)器進(jìn)行重傳。實(shí)際應(yīng)用中,在更新數(shù)據(jù)的步驟之后,該方法還可以進(jìn)一步包括
數(shù)據(jù)服務(wù)器存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。這樣,在下一時(shí)間周期,所述數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù)包括數(shù)據(jù)服務(wù)器接收序列文件,獲取序列文件中包含的游標(biāo)序列號(hào),判斷獲取的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào);如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,序列文件中包含中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該序列文件,向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送; 如果序列文件中包含的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù)。步驟304,接收數(shù)據(jù)更新成功信息,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映身寸關(guān)系。本步驟中,數(shù)據(jù)服務(wù)器根據(jù)接收的數(shù)據(jù)更新命令,更新數(shù)據(jù),在數(shù)據(jù)更新成功之后,返回?cái)?shù)據(jù)更新成功信息。本發(fā)明實(shí)施例中,該方法還可以進(jìn)一步包括步驟305,監(jiān)測(cè)到數(shù)據(jù)服務(wù)器重啟服務(wù)后,獲取存儲(chǔ)的游標(biāo)序列號(hào),觸發(fā)向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送。本步驟中,讀取存儲(chǔ)的游標(biāo)文件中,獲取游標(biāo)文件中順序位最高的游標(biāo),即最大的游標(biāo)序列號(hào),根據(jù)該最大的游標(biāo)序列號(hào),查詢游標(biāo)分配器存儲(chǔ)的AOF文件,根據(jù)AOF文件中的映射關(guān)系,獲取最大的游標(biāo)序列號(hào)對(duì)應(yīng)的數(shù)據(jù)更新命令,從而根據(jù)獲取的數(shù)據(jù)更新命令,對(duì)數(shù)據(jù)服務(wù)器中最近更新的數(shù)據(jù),依序執(zhí)行最大的游標(biāo)序列號(hào)對(duì)應(yīng)的數(shù)據(jù)更新命令之后的數(shù)據(jù)更新命令,從而實(shí)現(xiàn)數(shù)據(jù)同步。這樣,通過(guò)主動(dòng)觸發(fā)數(shù)據(jù)更新,并向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,可以使得游標(biāo)分配器只需向數(shù)據(jù)服務(wù)器返回該數(shù)據(jù)服務(wù)器未處理成功的數(shù)據(jù)更新命令,從而降低了數(shù)據(jù)更新同步所需的時(shí)間,也避免了由于數(shù)據(jù)服務(wù)器異常導(dǎo)致的數(shù)據(jù)丟失,有效提升了數(shù)據(jù)同步性能。顯然,本領(lǐng)域技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若對(duì)本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種內(nèi)存數(shù)據(jù)備份方法,該方法包括 接收數(shù)據(jù)更新命令,為數(shù)據(jù)更新命令分配游標(biāo); 構(gòu)建數(shù)據(jù)更新命令與分配的游標(biāo)的映射關(guān)系,生成序列文件; 將生成的序列文件輸出,以使數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù); 接收數(shù)據(jù)更新成功信息,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。
2.根據(jù)權(quán)利要求I所述的方法,其中,所述為數(shù)據(jù)更新命令分配游標(biāo)包括 判斷當(dāng)前接收的數(shù)據(jù)更新命令是否為接收的第一條數(shù)據(jù)更新命令,如果是,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息;如果不是,將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為接收數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息。
3.根據(jù)權(quán)利要求I所述的方法,其中,所述為數(shù)據(jù)更新命令分配游標(biāo)包括 判斷預(yù)先存儲(chǔ)的不斷添加模式AOF文件中是否存在寫入的數(shù)據(jù)更新命令,如果不存在,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào);如果存在,獲取AOF文件中當(dāng)前已寫入的數(shù)據(jù)更新命令的游標(biāo)序列號(hào)信息,對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為接收的數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào)。
4.根據(jù)權(quán)利要求I至3任一項(xiàng)所述的方法,其中,所述序列文件采用輕量級(jí)的數(shù)據(jù)交換格式JSON生成,并按照行進(jìn)行數(shù)據(jù)更新命令劃分。
5.根據(jù)權(quán)利要求4所述的方法,其中,在所述將生成的序列文件輸出的步驟之前,進(jìn)一步包括 根據(jù)生成的序列文件,查詢存儲(chǔ)的映射關(guān)系,獲取與序列文件中游標(biāo)序列號(hào)相匹配的數(shù)據(jù)服務(wù)器信息,將數(shù)據(jù)服務(wù)器信息攜帶在序列文件中。
6.根據(jù)權(quán)利要求5所述的方法,其中,在所述將生成的序列文件輸出的步驟之后,進(jìn)一步包括 存儲(chǔ)該序列文件并進(jìn)行計(jì)時(shí); 如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)更新成功信息,將當(dāng)前存儲(chǔ)的序列文件向所述數(shù)據(jù)服務(wù)器進(jìn)行重傳。
7.根據(jù)權(quán)利要求4所述的方法,其中,在所述更新數(shù)據(jù)的步驟之后,該方法進(jìn)一步包括 數(shù)據(jù)服務(wù)器存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系; 在下一時(shí)間周期,所述數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù)包括 數(shù)據(jù)服務(wù)器接收序列文件,獲取序列文件中包含的游標(biāo)序列號(hào),判斷獲取的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào); 如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,序列文件中包含中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該序列文件,向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送; 如果序列文件中包含的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù)。
8.根據(jù)權(quán)利要求4所述的方法,其中,所述方法進(jìn)一步包括 監(jiān)測(cè)到數(shù)據(jù)服務(wù)器重啟服務(wù)后,獲取存儲(chǔ)的游標(biāo)序列號(hào),觸發(fā)向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送。
9.一種內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,該內(nèi)存數(shù)據(jù)備份系統(tǒng)包括接收服務(wù)器、游標(biāo)分配器、分發(fā)器、游標(biāo)存儲(chǔ)器以及數(shù)據(jù)服務(wù)器,其中, 接收服務(wù)器,用于接收數(shù)據(jù)更新命令,輸出至游標(biāo)分配器; 游標(biāo)分配器,用于為依序接收的數(shù)據(jù)更新命令分配相應(yīng)的游標(biāo),構(gòu)建數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系,生成序列文件,輸出至分發(fā)器; 分發(fā)器,用于接收游標(biāo)分配器輸出的序列文件,將序列文件中的數(shù)據(jù)更新命令向數(shù)據(jù)服務(wù)器輸出,在接收到數(shù)據(jù)更新成功信息后,將數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系輸出至游標(biāo)存儲(chǔ)器; 游標(biāo)存儲(chǔ)器,用于以數(shù)據(jù)服務(wù)器為標(biāo)識(shí),存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系; 數(shù)據(jù)服務(wù)器,用于根據(jù)接收的數(shù)據(jù)更新命令,更新數(shù)據(jù),在數(shù)據(jù)更新成功之后,向分發(fā)器返回?cái)?shù)據(jù)更新成功信息。
10.根據(jù)權(quán)利要求9所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述游標(biāo)分配器包括接收模塊、判斷模塊、分配模塊、累加模塊、序列文件生成模塊以及發(fā)送模塊,其中, 接收模塊,用于接收數(shù)據(jù)更新命令,輸出至判斷模塊; 判斷模塊,用于判斷當(dāng)前接收的數(shù)據(jù)更新命令是否為接收的第一條數(shù)據(jù)更新命令,如果是,輸出至分配模塊,如果不是,輸出至累加模塊; 分配模塊,用于為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào),并記錄分配的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊; 累加模塊,用于將記錄的游標(biāo)序列號(hào)進(jìn)行累加,為接收數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),記錄累加的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊; 序列文件生成模塊,用于根據(jù)接收的游標(biāo)序列號(hào)信息,構(gòu)建數(shù)據(jù)更新命令與游標(biāo)序列號(hào)的映射關(guān)系,生成序列文件,輸出至發(fā)送模塊; 發(fā)送模塊,用于將接收的序列文件輸出至分發(fā)器。
11.根據(jù)權(quán)利要求9所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述游標(biāo)分配器包括接收模塊、判斷模塊、分配模塊、獲取模塊、累加模塊、序列文件生成模塊以及發(fā)送模塊,其中, 接收模塊,用于接收數(shù)據(jù)更新命令,輸出至判斷模塊; 判斷模塊,用于判斷AOF文件中是否存在寫入的數(shù)據(jù)更新命令,如果不存在,通知分配模塊,如果存在,通知獲取模塊; 分配模塊,用于接收通知,為接收的數(shù)據(jù)更新命令分配游標(biāo)序列號(hào); 獲取模塊,用于接收通知,獲取AOF文件中當(dāng)前已寫入的數(shù)據(jù)更新命令的游標(biāo)序列號(hào)信息,輸出至序列文件生成模塊; 累加模塊,用于對(duì)獲取的游標(biāo)序列號(hào)進(jìn)行累加,為接收的數(shù)據(jù)更新命令設(shè)置累加的游標(biāo)序列號(hào),輸出至序列文件生成模塊; 序列文件生成模塊,用于根據(jù)接收的游標(biāo)序列號(hào)信息,構(gòu)建數(shù)據(jù)更新命令與游標(biāo)序列號(hào)的映射關(guān)系,生成序列文件,輸出至發(fā)送模塊; 發(fā)送模塊,用于將接收的序列文件輸出至分發(fā)器。
12.根據(jù)權(quán)利要求9所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述分發(fā)器包括序列文件分發(fā)模塊以及游標(biāo)信息處理模塊,其中, 序列文件分發(fā)模塊,用于接收游標(biāo)分配器輸出的序列文件,將序列文件中的數(shù)據(jù)更新命令或序列文件向數(shù)據(jù)服務(wù)器輸出; 游標(biāo)信息處理模塊,用于在接收到數(shù)據(jù)更新成功信息后,將數(shù)據(jù)更新成功對(duì)應(yīng)的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系輸出至游標(biāo)存儲(chǔ)器。
13.根據(jù)權(quán)利要求12所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述分發(fā)器進(jìn)一步包括 序列文件處理模塊,用于接收游標(biāo)分配器輸出的序列文件,查詢游標(biāo)存儲(chǔ)器,獲取與序列文件中游標(biāo)序列號(hào)相匹配的數(shù)據(jù)服務(wù)器信息,將數(shù)據(jù)服務(wù)器信息向序列文件分發(fā)模塊輸出,以使序列文件分發(fā)模塊根據(jù)接收的數(shù)據(jù)服務(wù)器信息進(jìn)行輸出。
14.根據(jù)權(quán)利要求12所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述分發(fā)器進(jìn)一步包括 計(jì)時(shí)模塊,用于在輸出序列文件后,存儲(chǔ)該序列文件并進(jìn)行計(jì)時(shí); 如果在預(yù)先設(shè)置的計(jì)時(shí)時(shí)間內(nèi)沒(méi)有接收到數(shù)據(jù)服務(wù)器返回的數(shù)據(jù)更新成功信息,將當(dāng)前存儲(chǔ)的序列文件向所述數(shù)據(jù)服務(wù)器進(jìn)行重傳。
15.根據(jù)權(quán)利要求9所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述游標(biāo)存儲(chǔ)器包括 游標(biāo)存儲(chǔ)區(qū)劃分模塊以及游標(biāo)存儲(chǔ)模塊,其中, 游標(biāo)存儲(chǔ)區(qū)劃分模塊,用于以數(shù)據(jù)服務(wù)器為標(biāo)識(shí)劃分游標(biāo)存儲(chǔ)區(qū),以使每一數(shù)據(jù)服務(wù)器對(duì)應(yīng)一塊游標(biāo)存儲(chǔ)子區(qū); 游標(biāo)存儲(chǔ)模塊,用于根據(jù)數(shù)據(jù)更新成功信息攜帶的數(shù)據(jù)服務(wù)器信息,在相應(yīng)的游標(biāo)存儲(chǔ)子區(qū)中,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。
16.根據(jù)權(quán)利要求15所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述游標(biāo)存儲(chǔ)器進(jìn)一步包括 游標(biāo)更新模塊,用于遍歷游標(biāo)存儲(chǔ)模塊,獲取映射關(guān)系中的最大游標(biāo)序列號(hào),刪除除最大游標(biāo)序列號(hào)對(duì)應(yīng)的映射關(guān)系外的其他游標(biāo)序列號(hào)對(duì)應(yīng)的映射關(guān)系。
17.根據(jù)權(quán)利要求9所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述數(shù)據(jù)服務(wù)器包括數(shù)據(jù)更新模塊以及成功信息確認(rèn)模塊,其中, 數(shù)據(jù)更新模塊,用于根據(jù)接收的數(shù)據(jù)更新命令,更新數(shù)據(jù); 成功信息確認(rèn)模塊,用于在數(shù)據(jù)更新成功之后,向分發(fā)器返回?cái)?shù)據(jù)更新成功信息。
18.根據(jù)權(quán)利要求17所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述數(shù)據(jù)服務(wù)器進(jìn)一步包括游標(biāo)存儲(chǔ)模塊以及匹配模塊,其中, 游標(biāo)存儲(chǔ)模塊,用于存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系; 匹配模塊,用于接收序列文件,獲取序列文件中包含的游標(biāo)序列號(hào),判斷獲取的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào); 如果序列文件中包含的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相同,或者,序列文件中包含中的游標(biāo)序列號(hào)與存儲(chǔ)的游標(biāo)序列號(hào)相差兩個(gè)以上累加單位,丟棄該序列文件,向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送;如果序列文件中包含的游標(biāo)序列號(hào)大于存儲(chǔ)的游標(biāo)序列號(hào)一個(gè)累加單位,將該序列文件輸出至數(shù)據(jù)更新模塊。
19.根據(jù)權(quán)利要求17所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述數(shù)據(jù)服務(wù)器進(jìn)一步包括 數(shù)據(jù)更新請(qǐng)求模塊,用于在數(shù)據(jù)服務(wù) 器重啟服務(wù)后,獲取游標(biāo)存儲(chǔ)模塊存儲(chǔ)的游標(biāo)序列號(hào),觸發(fā)匹配模塊向游標(biāo)分配器返回存儲(chǔ)的游標(biāo)序列號(hào)信息,以使游標(biāo)分配器將接收的游標(biāo)序列號(hào)之后的序列文件通過(guò)分發(fā)器向該數(shù)據(jù)服務(wù)器發(fā)送。
20.根據(jù)權(quán)利要求9至19任一項(xiàng)所述的內(nèi)存數(shù)據(jù)備份系統(tǒng),其特征在于,所述序列文件采用輕量級(jí)的數(shù)據(jù)交換格式JSON生成,并按照行進(jìn)行數(shù)據(jù)更新命令劃分。
全文摘要
本發(fā)明公開(kāi)了一種內(nèi)存數(shù)據(jù)備份方法及內(nèi)存數(shù)據(jù)備份系統(tǒng)。該內(nèi)存數(shù)據(jù)備份方法包括接收數(shù)據(jù)更新命令,為數(shù)據(jù)更新命令分配游標(biāo);構(gòu)建數(shù)據(jù)更新命令與分配的游標(biāo)的映射關(guān)系,生成序列文件;將生成的序列文件輸出,以使數(shù)據(jù)服務(wù)器根據(jù)接收的序列文件中的數(shù)據(jù)更新命令,更新數(shù)據(jù);接收數(shù)據(jù)更新成功信息,存儲(chǔ)數(shù)據(jù)更新成功的數(shù)據(jù)更新命令與游標(biāo)的映射關(guān)系。應(yīng)用本發(fā)明,可以避免數(shù)據(jù)丟失、提升數(shù)據(jù)的同步性能。
文檔編號(hào)G06F11/14GK102880529SQ20121034023
公開(kāi)日2013年1月16日 申請(qǐng)日期2012年9月13日 優(yōu)先權(quán)日2012年9月13日
發(fā)明者湯曉剛 申請(qǐng)人:新浪網(wǎng)技術(shù)(中國(guó))有限公司