基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,包括:(1)生成摘要的查詢(xún)語(yǔ)句“select?into?outfile”,根據(jù)FIELDS子句設(shè)置標(biāo)志位;將“select?into?outfile”從數(shù)據(jù)庫(kù)查詢(xún)得到的一行元組插入“屬性值分隔符”;根據(jù)標(biāo)志位值對(duì)“select?into?outfile”查詢(xún)執(zhí)行的結(jié)果生成摘要md5value和產(chǎn)生輸出格式;將查詢(xún)結(jié)果寫(xiě)到磁盤(pán)文件outfile;(2)采用Hadoop?MapReduce并行框架求差分;從map端讀入兩個(gè)快照文件old.txt和new.txt,MapReduce的shuffle函數(shù)對(duì)Key/value結(jié)構(gòu)中相同key的value值存入迭代器iterator,將reduce的輸出文件合并成insert文件和delete文件,即CDC的結(jié)果。本發(fā)明對(duì)MYSQL中的查詢(xún)語(yǔ)句從語(yǔ)法到實(shí)現(xiàn)上作了改進(jìn),使其一次查詢(xún)數(shù)據(jù)庫(kù)數(shù)據(jù)文件就能生成帶摘要的快照文件,一個(gè)快照文件的生成就減少了一次I/O,連續(xù)多次的快照差分過(guò)程可以減少大量的I/O。【專(zhuān)利說(shuō)明】基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及數(shù)據(jù)捕捉的【
技術(shù)領(lǐng)域:
】,特別涉及一種基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法。【
背景技術(shù):
】[0002]變化數(shù)據(jù)捕獲(changedatacapture,CDC)是ETL(ExtractTransformLoad)過(guò)程所要解決的主要問(wèn)題之一。⑶C用于捕獲生產(chǎn)數(shù)據(jù)庫(kù)中數(shù)據(jù)更新操作(如插入insert、刪除delete、修改update)的數(shù)據(jù),為OLAP數(shù)據(jù)庫(kù)、報(bào)表數(shù)據(jù)庫(kù)、數(shù)據(jù)倉(cāng)庫(kù),商業(yè)智能數(shù)據(jù)庫(kù)等企業(yè)應(yīng)用數(shù)據(jù)庫(kù)的數(shù)據(jù)同步更新提供增量數(shù)據(jù)抽取服務(wù)。[0003]現(xiàn)有的變化數(shù)據(jù)捕獲⑶C方法可歸納為五類(lèi):[0004](I)基于時(shí)間屬性的⑶C方法[0005]若數(shù)據(jù)庫(kù)的表是只追加表(只允許插入不允許刪除、更新操作的表稱(chēng)為只追加表),在表結(jié)構(gòu)中包含了一個(gè)時(shí)間屬性,該時(shí)間屬性的值為記錄插入數(shù)據(jù)庫(kù)的系統(tǒng)時(shí)間,基于時(shí)間戳的方法采用定期地使用SQL(structurequerylanguage)查詢(xún)獲得某個(gè)時(shí)間段新插入的記錄來(lái)實(shí)現(xiàn)變化數(shù)據(jù)的捕獲。[0006]⑵基于觸發(fā)器的⑶C方法[0007]觸發(fā)器是數(shù)據(jù)庫(kù)系統(tǒng)在特定的條件或某事件發(fā)生時(shí)調(diào)用的存儲(chǔ)過(guò)程,基于觸發(fā)器的⑶C方法就是利用這些觸發(fā)器機(jī)制創(chuàng)建插入、刪除和更新操作(insertdeleteupdate,IDU)的觸發(fā)器,當(dāng)數(shù)據(jù)庫(kù)執(zhí)行了IDU操作時(shí)觸發(fā)器將這些操作的記錄寫(xiě)入另一些表來(lái)獲取變化數(shù)據(jù)。[0008](3)基于日志的⑶C方法[0009]數(shù)據(jù)庫(kù)日志記錄了數(shù)據(jù)庫(kù)所有的IDU操作,通過(guò)對(duì)數(shù)據(jù)庫(kù)日志進(jìn)行分析,提取出已提交事務(wù)的IDU操作記錄即可獲得數(shù)據(jù)庫(kù)的變化數(shù)據(jù)。[0010](4)基于API的CDC方法[0011]假設(shè)數(shù)據(jù)庫(kù)系統(tǒng)為應(yīng)用程序提供了一組API(applicationprograminterface),應(yīng)用程序通過(guò)調(diào)用API來(lái)操作數(shù)據(jù)庫(kù),基于API的⑶C方法通過(guò)這些API來(lái)記錄應(yīng)用程序?qū)?shù)據(jù)庫(kù)的操作。[0012](5)基于快照差分的⑶C方法[0013]給定數(shù)據(jù)庫(kù)D,t為某一時(shí)刻,D在t時(shí)刻的狀態(tài)稱(chēng)為數(shù)據(jù)庫(kù)的一個(gè)快照,快照是數(shù)據(jù)庫(kù)中選擇的部分?jǐn)?shù)據(jù)的拷貝,它反映了數(shù)據(jù)庫(kù)在過(guò)去的某個(gè)時(shí)刻的狀態(tài)。基于快照差分的CDC方法是對(duì)數(shù)據(jù)庫(kù)二個(gè)連續(xù)的快照通過(guò)對(duì)比得出數(shù)據(jù)庫(kù)的變化數(shù)據(jù)?,F(xiàn)有的差分方法歸納為三類(lèi):排序歸并算法、Hash分區(qū)算法和Window算法。排序歸并算法先對(duì)二個(gè)連續(xù)的快照文件進(jìn)行排序,然后對(duì)排序的文件依次掃描找出IDU的記錄。Hash分區(qū)算法首先根據(jù)給定的哈希函數(shù)對(duì)二個(gè)連續(xù)的快照文件進(jìn)行分區(qū),然后對(duì)健值相同的哈希桶進(jìn)行對(duì)比找出IDU的記錄。Window算法基于二個(gè)連續(xù)的快照文件相匹配的元組在物理位置上也是相互接近這一前提,不匹配的元組先被保存在預(yù)先建立的“窗口”區(qū)中等待匹配,當(dāng)窗口緩沖區(qū)溢出時(shí),將“較老”的元組看作是IDU的記錄。[0014]不同的CDC方法主要在適用范圍、對(duì)生產(chǎn)系統(tǒng)(數(shù)據(jù)庫(kù)所在系統(tǒng))計(jì)算機(jī)資源的占用、對(duì)業(yè)務(wù)系統(tǒng)(數(shù)據(jù)庫(kù)的應(yīng)用系統(tǒng))的修改要求、同步操作的時(shí)間延遲及算法實(shí)現(xiàn)的復(fù)雜性等幾方面存在差異。[0015](I)基于時(shí)間屬性的⑶C方法[0016]基于時(shí)間屬性的CDC方法采用利用時(shí)間屬性的查詢(xún)來(lái)獲得變化數(shù)據(jù),因此僅限于只追加表,僅能捕獲到新插入或新修改的數(shù)據(jù);基于時(shí)間屬性的CDC方法實(shí)現(xiàn)簡(jiǎn)單,不涉及對(duì)業(yè)務(wù)系統(tǒng)的修改,查詢(xún)操作占用生產(chǎn)系統(tǒng)資源較少,同步操作的延遲較低。[0017](2)基于觸發(fā)器的⑶C方法[0018]基于觸發(fā)器的CDC方法僅適用于支持觸發(fā)器的數(shù)據(jù)庫(kù)系統(tǒng)中。觸發(fā)器滿足ECA(EventConditionAction)規(guī)則,數(shù)據(jù)庫(kù)的每項(xiàng)操作都需要檢查觸發(fā)器,當(dāng)條件滿足時(shí)需要成倍地增加數(shù)據(jù)庫(kù)操作,降低了生產(chǎn)系統(tǒng)和業(yè)務(wù)系統(tǒng)的執(zhí)行效率?;谟|發(fā)器的CDC方法實(shí)現(xiàn)簡(jiǎn)單,同步操作是實(shí)時(shí)的。[0019](3)基于日志的⑶C方法[0020]日志是數(shù)據(jù)庫(kù)系統(tǒng)為實(shí)現(xiàn)事務(wù)ACID性質(zhì)和數(shù)據(jù)庫(kù)恢復(fù)而建立的一種機(jī)制。數(shù)據(jù)庫(kù)日志采用二進(jìn)制或加密的二進(jìn)制文件格式,用戶(hù)程序只能通過(guò)數(shù)據(jù)庫(kù)系統(tǒng)提供的訪問(wèn)接口來(lái)讀取數(shù)據(jù)庫(kù)日志;不同數(shù)據(jù)庫(kù)產(chǎn)品或同一產(chǎn)品的不同版本在日志記錄格式存在千差萬(wàn)另|J,這使得日志文件的讀取和分析變得非常困難。基于日志的CDC方法可以將日志文件復(fù)制到生產(chǎn)系統(tǒng)之外的系統(tǒng)上進(jìn)行讀取和分析,因此對(duì)生產(chǎn)系統(tǒng)和業(yè)務(wù)系統(tǒng)的效率不產(chǎn)生任何影響,同步操作存在延遲。[0021](4)基于API的CDC方法[0022]基于API的⑶C方法主要通過(guò)API來(lái)獲取數(shù)據(jù)庫(kù)操作,僅能獲取調(diào)用該API的業(yè)務(wù)系統(tǒng)產(chǎn)生的變化數(shù)據(jù),無(wú)法獲得其他不采用API操作數(shù)據(jù)庫(kù)的業(yè)務(wù)系統(tǒng)產(chǎn)生的變化數(shù)據(jù)?;贏PI的CDC方法對(duì)生產(chǎn)系統(tǒng)的效率不產(chǎn)生任何影響,算法實(shí)現(xiàn)簡(jiǎn)單,同步操作是實(shí)時(shí)的。[0023](5)基于快照差分的⑶C方法[0024]基于快照差分的⑶C方法適用任何類(lèi)型的數(shù)據(jù)庫(kù)(如關(guān)系型數(shù)據(jù)庫(kù)、XML數(shù)據(jù)庫(kù)等)。基于快照差分的CDC方法可將快照文件存放在生產(chǎn)系統(tǒng)之外的系統(tǒng)上,因此對(duì)生產(chǎn)系統(tǒng)和業(yè)務(wù)系統(tǒng)的執(zhí)行效率不產(chǎn)生任何影響,算法實(shí)現(xiàn)較復(fù)雜,同步操作存在延遲?!?br/>發(fā)明內(nèi)容】[0025]本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種可以降低快照差分的I/O代價(jià),縮短求差分時(shí)間的基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法。[0026]本發(fā)明的目的通過(guò)下述技術(shù)方案實(shí)現(xiàn):[0027]本發(fā)明基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,包括下述步驟:[0028](I)生成摘要的查詢(xún)語(yǔ)句“selectintooutfile”,其具體步驟如下:[0029](1-1)詞法和語(yǔ)法分析“selectintooutfile”,根據(jù)FIELDS子句設(shè)置標(biāo)志位;[0030](1-2)將“selectintooutfile”從數(shù)據(jù)庫(kù)查詢(xún)得到的一行元組插入“屬性值分隔符”;[0031](1-3)根據(jù)標(biāo)志位值對(duì)“selectintooutfile”查詢(xún)執(zhí)行的結(jié)果生成摘要md5value和產(chǎn)生輸出格式;[0032](1-4)將查詢(xún)結(jié)果寫(xiě)到磁盤(pán)文件outfile;[0033](2)采用HadoopMapReduce并行框架求差分;[0034](2-1)從map端讀入兩個(gè)快照文件old.txt和new.txt,通過(guò)文件按行切分在map端輸出〈key,imd5valueivalue>或者〈key,imd5value>的形式,其中0md5value@value或imd5value作為Key/value結(jié)構(gòu)中的value值;[0035](2-2)MapReduce的shuffle函數(shù)對(duì)Key/value結(jié)構(gòu)中相同key的value值存入迭代器iterator,發(fā)送reduce端;[0036](2-3)reduce端接收的數(shù)據(jù)形式為〈key,iterator〉,對(duì)iterator中的value個(gè)數(shù)進(jìn)行統(tǒng)計(jì)和分類(lèi)可取獲得變化的數(shù)據(jù):[0037](2-4)將reduce的輸出文件合并成insert文件和delete文件,即Q)C的結(jié)果。[0038]優(yōu)選的,所述查詢(xún)語(yǔ)句符合下述語(yǔ)法要求:[0039](a)FIELDS子句的“輸出標(biāo)識(shí)符”、“段分隔符”、“屬性值分隔符”為可選項(xiàng);“輸出標(biāo)識(shí)符”可取三個(gè)值:缺省、;“段分隔符”可缺省或者取除和出現(xiàn)在該數(shù)據(jù)庫(kù)之外的其他符號(hào);“屬性值分隔符”可缺省或者取除和出現(xiàn)在該數(shù)據(jù)庫(kù)之外的符號(hào);“段分隔符”和“屬性值分隔符”不能為相同的符號(hào);[0040](b)若“輸出標(biāo)識(shí)符”缺省則“段分隔符”也一定缺省,該語(yǔ)句僅輸出每行元組的屬性值;[0041](C)若“輸出標(biāo)識(shí)符”為時(shí),“段分隔符”不可缺省,該語(yǔ)句輸出每行元組的主碼值key和該行的摘要MD5value,由“段分隔符”將主碼值key和摘要MD5value分隔開(kāi);[0042](d)若“輸出標(biāo)識(shí)符”為’##’時(shí),“段分隔符”不可缺省,該語(yǔ)句輸出每行元組的主碼值key、該行的摘要MD5value和屬性在該行的取值value,由“段分隔符”將主碼值key、摘要MD5value和值value分隔開(kāi);若定義了“屬性值分隔符”,則值value和key由“屬性值分隔符”將每個(gè)屬性值分隔開(kāi);[0043](e)該查詢(xún)語(yǔ)句可用于一般查詢(xún),也可用于包含摘要的快照文件的生成;若將該查詢(xún)語(yǔ)句用于包含摘要的快照文件的生成,“輸出標(biāo)識(shí)符”取值’##’時(shí),必須定義“屬性值分隔符”,這樣方便計(jì)算變化的數(shù)據(jù);[0044](f)子句LINES定義行分隔符,一般取值為“回車(chē)&換行”,不可缺省,方便按行讀取文件。[0045]優(yōu)選的,步驟(1-1)的具體形式如下:[0046](1-1-1)讀取FIELDSTERMINATEDBY的第一個(gè)字節(jié),若不為“#”,則置標(biāo)志位normal為true,表示查詢(xún)結(jié)果將按標(biāo)準(zhǔn)格式輸出到磁盤(pán)文件,否則置標(biāo)志位normal為false,表示查詢(xún)結(jié)果將按個(gè)性定義輸出到磁盤(pán)文件;[0047](1-1-2)若標(biāo)志位normal為false,則讀取FIELDSTERMINATEDBY第二個(gè)字節(jié),若為“#,,’則置標(biāo)志位selfhood為true,表示輸出主碼值key和摘要md5value,否則置標(biāo)志位selfhood為false,表示輸出主碼值key、摘要md5value和整個(gè)元值的值value。[0048]優(yōu)選的,步驟(1-3)具體為:[0049](1-3-1)提取當(dāng)前行的數(shù)據(jù)分隔符;[0050](1-3-2)取出當(dāng)前行的數(shù)據(jù)存于cache中并記錄下key值;[0051](1-3-3)若標(biāo)志位normal為true,直接輸出cache中的數(shù)據(jù),轉(zhuǎn)下一行處理;[0052](1-3-4)若標(biāo)志位normal為false,調(diào)用md5程序?yàn)閏ache中數(shù)據(jù)生成摘要md5value;[0053](1-3-5)若標(biāo)志位selfhood為true,輸出主碼值key和摘要md5value,輸出格式為ikeyimd5value;[0054](1-3-6)若標(biāo)志位selfhood為false,輸出主碼值key、摘要md5value和整個(gè)元組值value,輸出格式為0key@md5value@value。[0055]優(yōu)選的,步驟(2-3)具體為:[0056](2-3-1)若iterator僅有一個(gè)數(shù)據(jù),即該數(shù)據(jù)僅出現(xiàn)在一個(gè)快照文件中,說(shuō)明該數(shù)據(jù)是數(shù)據(jù)庫(kù)新插入insert或刪除delete的元組;[0057](2-3-2)若iterator有二個(gè)數(shù)據(jù),即該數(shù)據(jù)出現(xiàn)在二個(gè)快照文件中,繼續(xù)比較二個(gè)數(shù)據(jù)中md5value的值,如果md5value值相同,說(shuō)明該數(shù)據(jù)沒(méi)有變化,如果md5value值不相同,說(shuō)明該數(shù)據(jù)是數(shù)據(jù)庫(kù)作了更新update操作的結(jié)果,將更新update操作分解為刪除delete操作和插入insert操作。[0058]優(yōu)選的,步驟(2-4)中,采用帶值⑶C算法或回查⑶C算法對(duì)數(shù)據(jù)進(jìn)行處理,所述帶值CDC算法的處理方法如下:[0059](2-4-1)從快照文件讀入一行數(shù)據(jù),取該行的第一個(gè)字符sign;[0060](2-4-2)用sign切分剩下的字符串得到一個(gè)字符數(shù)組;[0061](2-4-3)將字符數(shù)組的第一個(gè)元素作為key,剩余的元素作為value;[0062](2-4-4)將切分后的數(shù)據(jù)傳給shuffle函數(shù);[0063](2-4-5)經(jīng)過(guò)shuffle函數(shù)處理后的數(shù)據(jù)傳送到Reduce端,數(shù)據(jù)格式為〈key,iterator〉,取出iterator的第一個(gè)兀素valuel;[0064](2-4-6)根據(jù)iterator中元素個(gè)數(shù)判斷數(shù)據(jù)庫(kù)的更新操作;[0065](2-4-7)處理完〈key,iterator〉后的insert文件和delete文件即為數(shù)據(jù)庫(kù)變化數(shù)據(jù)文件。[0066]優(yōu)選的,步驟(2-4-6)的具體步驟如下:[0067](2-4-6-1)若iterator為空,則〈key,iterator〉的值為數(shù)據(jù)庫(kù)新插入或刪除操作產(chǎn)生的元組,讀出“段分隔符”將〈key,valuel〉插入insert文件或delete文件;[0068](2-4-6-2)若iterator不為空,則取出iterator中的兀素valuel和兀素value2中的md5value,若valuel和value2中的md5value值相同,貝U數(shù)據(jù)庫(kù)對(duì)該元組沒(méi)有更新操作,否則〈key,iterator)為數(shù)據(jù)庫(kù)修改操作前和修改操作后的值,讀出valuel和value2的“段分隔符”將〈key,valuel〉和〈key,value2>分別插入insert文件和delete文件。[0069]優(yōu)選的,所述回查⑶C算法的處理方法如下:[0070](2-5-1)從快照文件讀入一行數(shù)據(jù),取該行的第一個(gè)字符sign;[0071](2-5-2)用sign切分剩下的字符串得到一個(gè)字符數(shù)組;[0072](2-5-3)將字符數(shù)組的第一個(gè)元素作為key,剩余的元素作為value;[0073](2-5-4)將切分后的數(shù)據(jù)傳給shuffle函數(shù);[0074](2-5-5)經(jīng)過(guò)shuffle函數(shù)處理后的數(shù)據(jù)傳送到Reduce端,數(shù)據(jù)格式為〈key,iterator〉,取出iterator的第一個(gè)兀素valuel;[0075](2-5-6)根據(jù)iterator中元素個(gè)數(shù)判斷數(shù)據(jù)庫(kù)的更新操作;[0076](2-5-7)處理完〈key,iterator〉后的insert文件和delete文件即為數(shù)據(jù)庫(kù)變化數(shù)據(jù)文件。[0077]優(yōu)選的,步驟(2-5-6)具體為:[0078](2-5-6-1)若iterator為空,則〈key,iterator〉的值為數(shù)據(jù)庫(kù)新插入或刪除操作產(chǎn)生的元組,讀出“段分隔符”為舊快照標(biāo)識(shí)符,直接輸出到delete文件;讀出“段分隔符”為新快照標(biāo)識(shí)符,通過(guò)JDBC連接數(shù)據(jù)庫(kù)回查該key值對(duì)應(yīng)的元組值,將查詢(xún)結(jié)果輸出到insert文件;[0079](2-5-6-2)若iterator不為空,則取出iterator中的兀素valuel和兀素value2中的md5value,若valuel和value2中的md5value值相同,貝U數(shù)據(jù)庫(kù)對(duì)該元組沒(méi)有更新操作,否則〈key,iterator)為數(shù)據(jù)庫(kù)修改操作前和修改操作后的值,若讀出valuel的“段分隔符”為舊快照標(biāo)識(shí)符,直接將valuel的key輸出到delete文件,通過(guò)JDBC連接數(shù)據(jù)庫(kù)回查該value2的key值對(duì)應(yīng)的元組值,將查詢(xún)結(jié)果輸出到insert文件,否則反之。[0080]本發(fā)明相對(duì)于現(xiàn)有技術(shù)具有如下的優(yōu)點(diǎn)及效果:[0081](I)查詢(xún)語(yǔ)句selectintooutfile的功能與實(shí)現(xiàn):現(xiàn)有的基于摘要的快照差分算法在每次快照文件的生成時(shí)需要二次磁盤(pán)1/0,一次1/0是查詢(xún)數(shù)據(jù)庫(kù)數(shù)據(jù)文件再寫(xiě)入磁盤(pán)文件,一次I/o是讀取磁盤(pán)文件生成摘要再寫(xiě)進(jìn)新的快照文件,對(duì)數(shù)據(jù)量大的數(shù)據(jù)庫(kù)文件和連續(xù)多次的快照差分過(guò)程來(lái)說(shuō),這樣的I/o代價(jià)是非常高的。本發(fā)明對(duì)MYSQL中的查詢(xún)語(yǔ)句selectintooutfile從語(yǔ)法到實(shí)現(xiàn)上作了改進(jìn),使其一次查詢(xún)數(shù)據(jù)庫(kù)數(shù)據(jù)文件就能生成帶摘要的快照文件,一個(gè)快照文件的生成就減少了一次1/0,連續(xù)多次的快照差分過(guò)程可以減少大量的1/0。同時(shí)該語(yǔ)句增加了數(shù)據(jù)庫(kù)查詢(xún)時(shí)給查詢(xún)數(shù)據(jù)添加附加信息的能力,增強(qiáng)了數(shù)據(jù)庫(kù)查詢(xún)的表達(dá)能力。[0082](2)基于MapReduce并行框架的快照差分的實(shí)現(xiàn):MapRedUCe是利用集群并行處理數(shù)據(jù)的編程框架,現(xiàn)有MapReduce主要應(yīng)用在詞頻統(tǒng)計(jì)等方面,尚未有變化數(shù)據(jù)捕獲方面的應(yīng)用?,F(xiàn)有的快照差分也沒(méi)有集群處理的實(shí)現(xiàn),本發(fā)明結(jié)合MapReduce并行處理框架和快照差分的算法思想,實(shí)現(xiàn)了大數(shù)據(jù)量、準(zhǔn)確、快速的數(shù)據(jù)庫(kù)變化數(shù)據(jù)捕獲方法。[0083](3)本發(fā)明采用了HadoopMapReduce的并行編程框架,集群的并行處理能力能夠處理大數(shù)據(jù)量的數(shù)據(jù),提高了求差分的速度;利用MapReduce的shuffle函數(shù)與排序歸并的思想保證結(jié)果的正確性,解決了現(xiàn)有快照差分算法存在的問(wèn)題,具有廣泛的應(yīng)用前景。【專(zhuān)利附圖】【附圖說(shuō)明】[0084]圖1基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法總流程圖;[0085]圖2是本發(fā)明包含摘要的查詢(xún)語(yǔ)句流程圖;[0086]圖3是map端一條數(shù)據(jù)執(zhí)行的流程圖;[0087]圖4是帶值⑶C算法的Reduce端出來(lái)流程圖;[0088]圖5是回查⑶C算法的Reduce端處理流程圖?!揪唧w實(shí)施方式】[0089]下面結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此。[0090]實(shí)施例[0091]針對(duì)數(shù)據(jù)庫(kù)文件的I/O代價(jià)問(wèn)題,本發(fā)明通過(guò)MYSQL的開(kāi)源代碼實(shí)現(xiàn)了一個(gè)帶摘要的SQL查詢(xún),從而減少了生成包含摘要的快照文件的I/O代價(jià);為提高快照差分的速度、正確性和大數(shù)據(jù)量問(wèn)題,如圖1所示,本發(fā)明提出了基于HadoopMapReduce并行框架的快照差分算法。[0092]1、帶摘要的SQL查詢(xún)selectintooutfile[0093]求差分的過(guò)程就是比較二個(gè)快照文件中的對(duì)應(yīng)行,一種方法是將對(duì)應(yīng)行中屬性值逐個(gè)進(jìn)行比較,若屬性個(gè)數(shù)比較多時(shí)這個(gè)比較代價(jià)將會(huì)非常高;改進(jìn)的方法是將一行的屬性值生成摘要,直接比較對(duì)應(yīng)行的摘要得出差分結(jié)果?,F(xiàn)有方法在生成包含摘要的快照文件需要二次讀寫(xiě)文件,一次從數(shù)據(jù)庫(kù)中讀出數(shù)據(jù)文件寫(xiě)入磁盤(pán)文件,第二次讀出磁盤(pán)文件生成摘要再寫(xiě)回磁盤(pán)。如果能在數(shù)據(jù)庫(kù)讀出數(shù)據(jù)文件的同時(shí)生成摘要?jiǎng)t不需要第二次的磁盤(pán)讀寫(xiě),為每一次快照文件的生成減少了一次1/0,這將大大降低快照差分的I/O代價(jià)。本發(fā)明利用開(kāi)源數(shù)據(jù)庫(kù)MYSQL實(shí)現(xiàn)了查詢(xún)時(shí)生成摘要的查詢(xún)語(yǔ)句,摘要由MD5算法生成。生成摘要的查詢(xún)語(yǔ)句“selectintooutfile”的具體語(yǔ)法形式如下:[0094]SELECT列名INTOOUTFILE存入文件路徑及文件名[0095]FIELDSTERMINATEDBY’[輸出標(biāo)識(shí)符][段分隔符][屬性值分隔符]’[0096]LINESTERMINATEDBY’行數(shù)據(jù)分隔符’[0097]FROM表名;[0098]該查詢(xún)語(yǔ)句的語(yǔ)法要求:[0099](I)FIELDS子句的“輸出標(biāo)識(shí)符”、“段分隔符”、“屬性值分隔符”為可選項(xiàng);”輸出標(biāo)識(shí)符”可取三個(gè)值:缺省、’;“段分隔符”可缺省或者取除和出現(xiàn)在該數(shù)據(jù)庫(kù)之外的其他符號(hào),如;“屬性值分隔符”可缺省或者取除和出現(xiàn)在該數(shù)據(jù)庫(kù)之外的符號(hào),如’I’;“段分隔符”和“屬性值分隔符”不能為相同的符號(hào);[0100](2)若“輸出標(biāo)識(shí)符”缺省則“段分隔符”也一定缺省,該語(yǔ)句僅輸出每行元組的屬性值;[0101](3)若“輸出標(biāo)識(shí)符”為時(shí),“段分隔符”不可缺省,該語(yǔ)句輸出每行元組的主碼值key和該行的摘要MD5value,由“段分隔符”將主碼值key和摘要MD5value分隔開(kāi);[0102](4)若“輸出標(biāo)識(shí)符”為’##’時(shí),“段分隔符”不可缺省,該語(yǔ)句輸出每行元組的主碼值key、該行的摘要MD5value和屬性在該行的取值value,由“段分隔符”將主碼值key、摘要MD5value和值value分隔開(kāi);若定義了“屬性值分隔符”,則值value和key由“屬性值分隔符”將每個(gè)屬性值分隔開(kāi);[0103](5)該查詢(xún)語(yǔ)句可用于一般查詢(xún),也可用于包含摘要的快照文件的生成;若將該查詢(xún)語(yǔ)句用于包含摘要的快照文件的生成,“輸出標(biāo)識(shí)符”取值’##’時(shí),必須定義“屬性值分隔符”,這樣方便計(jì)算變化的數(shù)據(jù)。[0104](6)子句LINES定義行分隔符,一般取值為“回車(chē)&換行”,不可缺省,方便按行讀取文件;[0105]例:[0106]SELECT*INT0OUTFILE'd:\snapshotl.txt'[0107]FIELDSTERMINATEDBY’#_I’[0108]LINESTERMINATEDBY’OAHODH’[0109]FROMtableI;[0110]執(zhí)行該查詢(xún)產(chǎn)生的輸出文件snapshotLtxt的每一行的形式為:[0111]ikeyimd5valueiattributel|attribute2|...attributen[0112]其中key為一行元組的主碼,md5value為該行的摘要,attributel,...,attrituben為數(shù)據(jù)庫(kù)各個(gè)屬性在該行的取值。[0113]附圖2為實(shí)現(xiàn)該查詢(xún)語(yǔ)句的流程圖,具體過(guò)程如下:[0114](I)詞法和語(yǔ)法分析“selectintooutfile”,根據(jù)FIELDS子句設(shè)置標(biāo)志位[0115](1.1)讀取FIELDSTERMINATEDBY的第一個(gè)字節(jié),若不為“#”,則置標(biāo)志位normal為true,表示查詢(xún)結(jié)果將按標(biāo)準(zhǔn)格式輸出到磁盤(pán)文件,否則置標(biāo)志位normal為false,表示查詢(xún)結(jié)果將按個(gè)性定義輸出到磁盤(pán)文件;[0116](1.2)若標(biāo)志位normal為false,則讀取FIELDSTERMINATEDBY第二個(gè)字節(jié),若為“#”,則置標(biāo)志位selfhood為true,表不輸出主碼值key和摘要md5value,否則置標(biāo)志位selfhood為false,表示輸出主碼值key、摘要md5value和整個(gè)元值的值value;[0117](2)將“selectintooutfile”從數(shù)據(jù)庫(kù)查詢(xún)得到的一行元組插入“屬性值分隔符”;[0118](3)根據(jù)標(biāo)志位值對(duì)“selectintooutfile”查詢(xún)執(zhí)行的結(jié)果生成摘要md5value和產(chǎn)生輸出格式:[0119](3.1)提取當(dāng)前行的數(shù)據(jù)分隔符;[0120](3.2)取出當(dāng)前行的數(shù)據(jù)存于cache中并記錄下key值;[0121](3.3)若標(biāo)志位normal為true,直接輸出cache中的數(shù)據(jù),轉(zhuǎn)下一行處理;[0122](3.4)若標(biāo)志位normal為false,調(diào)用md5程序?yàn)閏ache中數(shù)據(jù)生成摘要md5value;[0123](3.5)若標(biāo)志位selfhood為true,輸出主碼值key和摘要md5value,輸出格式為ikeyimd5value;[0124](3.6)若標(biāo)志位selfhood為false,輸出主碼值key、摘要md5value和整個(gè)元組值value,輸出格式為0key@md5value@value;[0125](4)將查詢(xún)結(jié)果寫(xiě)到磁盤(pán)文件outfile;[0126]2、米有HadoopMapReduce并行框架求差分[0127]快照差分算法的關(guān)鍵問(wèn)題就是求差分的過(guò)程。由于快照文件比較大,難以一次全部裝入內(nèi)存;而快照文件在大小、排列上也存在很大的差異,使得求差分過(guò)程非常困難。為了降低求差分的難度,已有的研究提出了Hash分區(qū)和Window算法,這兩種算法由于受到內(nèi)存大小的限制而可能產(chǎn)生結(jié)果誤差,如:內(nèi)存裝不下一個(gè)哈希桶或者二個(gè)主碼在文件中的位置超出了Window大小都可能影響結(jié)果的正確性。對(duì)二個(gè)快照文件進(jìn)行排序歸并求差分的算法保證了結(jié)果的正確性,但單CPU的處理效率非常低。本發(fā)明將MapReduce的并行編程框架和排序歸并算法相結(jié)合,既保證⑶C結(jié)果的正確性,也保證⑶C的處理效率;至于Map/Reduce要求的集群條件對(duì)絕大多數(shù)公司都是可滿足的。[0128]MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于1TB)的并行運(yùn)算,處理Key/value結(jié)構(gòu)的數(shù)據(jù),MapReduce的工作原理不屬于本發(fā)明的范疇,在此就不詳細(xì)說(shuō)明。本發(fā)明主要利用了MapReduce的并行編程框架實(shí)現(xiàn)了快照差分算法。具體過(guò)程如下所述:[0129](I)從map端讀入兩個(gè)快照文件old.txt和new.txt,通過(guò)文件行的切分在map端輸出〈key,imd5valueivalue>或者〈key,imd5value>的形式,其中0md5value@value或Omd5value作為Key/value結(jié)構(gòu)中的value值。[0130](2)MapReduce的shuffle函數(shù)對(duì)Key/value結(jié)構(gòu)中相同key的value值存入迭代器iterator,發(fā)送reduce端[0131](3)reduce端接收的數(shù)據(jù)形式為〈key,iterator〉,對(duì)iterator中的value個(gè)數(shù)進(jìn)行統(tǒng)計(jì)和分類(lèi)可取獲得變化的數(shù)據(jù):[0132](3.1)若iterator僅有一個(gè)數(shù)據(jù),即該數(shù)據(jù)僅出現(xiàn)在一個(gè)快照文件中,說(shuō)明該數(shù)據(jù)是數(shù)據(jù)庫(kù)新插入insert或刪除delete的元組;[0133](3.2)若iterator有二個(gè)數(shù)據(jù),即該數(shù)據(jù)出現(xiàn)在二個(gè)快照文件中,繼續(xù)比較二個(gè)數(shù)據(jù)中md5value的值,如果md5value值相同,說(shuō)明該數(shù)據(jù)沒(méi)有變化,如果md5value值不相同,說(shuō)明該數(shù)據(jù)是數(shù)據(jù)庫(kù)作了更新update操作的結(jié)果,將更新update操作分解為刪除delete操作和插入insert操作;[0134](4)將reduce的輸出文件合并成insert文件和delete文件,即Q)C的結(jié)果[0135]針對(duì)數(shù)據(jù)庫(kù)更新操作的頻率和降低1/0代價(jià)的目的,本發(fā)明提出了帶值CDC和回查⑶C二種算法,這二種算法主要存在二點(diǎn)差別:[0136](I)“selectintooutfile”查詢(xún)結(jié)果輸出不一樣:帶值⑶C算法的輸出行形式為@key@MD5value@value,回查⑶C算法的輸出形式為@key@MD5value,對(duì)更新較少的數(shù)據(jù)庫(kù)采用回查CDC算法可減少寫(xiě)數(shù)據(jù)和Map端讀數(shù)據(jù)的代價(jià);[0137](2)二種⑶C算法獲得結(jié)果的方法不一樣:帶值⑶C算法直接由reduce端輸出變化數(shù)據(jù),回查CDC算法利用reduce端的結(jié)果對(duì)數(shù)據(jù)庫(kù)進(jìn)行一次查詢(xún)來(lái)獲得變化后的數(shù)據(jù),回查CDC算法增加了對(duì)數(shù)據(jù)庫(kù)的一次訪問(wèn);[0138]為區(qū)分新、舊快照,可在二次連續(xù)生成快照的“selectintooutfile”查詢(xún)語(yǔ)句采用不同的“段分隔符”,假設(shè)舊快照的“段分隔符”為“@”,新快照的“段分隔符”為“#,,(該假設(shè)不影響結(jié)果),帶值CDC算法和回查CDC算法在Map端的處理流程相同,如圖3所示,具體流程如下:[0139](I)從快照文件讀入一行數(shù)據(jù),取該行的第一個(gè)字符sign[0140](2)用sign切分剩下的字符串得到一個(gè)字符數(shù)組[0141](3)將字符數(shù)組的第一個(gè)元素作為key,剩余的元素作為value[0142](4)將切分后的數(shù)據(jù)傳給shuffle函數(shù)[0143]帶值⑶C算法的Reduce端處理流程如圖4所示,具體流程如下:[0144](I)經(jīng)過(guò)shuffle函數(shù)處理后的數(shù)據(jù)傳送到Reduce端,數(shù)據(jù)格式為〈key,iterator〉,取出iterator的第一個(gè)兀素valuel[0145](2)根據(jù)iterator中元素個(gè)數(shù)判斷數(shù)據(jù)庫(kù)的更新操作[0146](2.1)若iterator為空,貝U〈key,iterator〉的值為數(shù)據(jù)庫(kù)新插入或刪除操作產(chǎn)生的元組,讀出“段分隔符”將〈key,valuel〉插入insert文件或delete文件[0147](2.2)若iterator不為空,則取出iterator中的兀素valuel和兀素value2中的md5value,若valuel和value2中的md5value值相同,貝U數(shù)據(jù)庫(kù)對(duì)該元組沒(méi)有更新操作,否則〈key,iterator)為數(shù)據(jù)庫(kù)修改操作前和修改操作后的值,讀出valuel和value2的“段分隔符”將〈key,valuel〉和〈key,value2>分別插入insert文件和delete文件[0148](3)處理完〈key,iterator〉后的insert文件和delete文件即為數(shù)據(jù)庫(kù)變化數(shù)據(jù)文件。[0149]回查⑶C算法的Reduce端處理流程如圖5所示,具體流程如下:[0150](I)經(jīng)過(guò)shuffle函數(shù)處理后的數(shù)據(jù)傳送到Reduce端,數(shù)據(jù)格式為〈key,iterator〉,取出iterator的第一個(gè)兀素valuel[0151](2)根據(jù)iterator中元素個(gè)數(shù)判斷數(shù)據(jù)庫(kù)的更新操作[0152](2.1)若iterator為空,貝U〈key,iterator〉的值為數(shù)據(jù)庫(kù)新插入或刪除操作產(chǎn)生的元組,讀出“段分隔符”為舊快照標(biāo)識(shí)符,直接輸出到delete文件;讀出“段分隔符”為新快照標(biāo)識(shí)符,通過(guò)JDBC連接數(shù)據(jù)庫(kù)回查該key值對(duì)應(yīng)的元組值,將查詢(xún)結(jié)果輸出到insert文件;[0153](2.2)若iterator不為空,則取出iterator中的兀素valuel和兀素value2中的md5value,若valuel和value2中的md5value值相同,貝U數(shù)據(jù)庫(kù)對(duì)該元組沒(méi)有更新操作,否則〈key,iterator)為數(shù)據(jù)庫(kù)修改操作前和修改操作后的值,若讀出valuel的“段分隔符”為舊快照標(biāo)識(shí)符,直接將valuel的key輸出到delete文件,通過(guò)JDBC連接數(shù)據(jù)庫(kù)回查該value2的key值對(duì)應(yīng)的元組值,將查詢(xún)結(jié)果輸出到insert文件,否則反之。[0154](3)處理完〈key,iterator〉后的insert文件和delete文件即為數(shù)據(jù)庫(kù)變化數(shù)據(jù)文件。[0155]上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡(jiǎn)化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。【權(quán)利要求】1.基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,包括下述步驟:(1)生成摘要的查詢(xún)語(yǔ)句“selectintooutfile”,其具體步驟如下:(1-1)詞法和語(yǔ)法分析“selectintooutfile”,根據(jù)FIELDS子句設(shè)置標(biāo)志位;(1-2)將“selectintooutfile”從數(shù)據(jù)庫(kù)查詢(xún)得到的一行元組插入“屬性值分隔符”;(1_3)根據(jù)標(biāo)志位值對(duì)“selectintooutfile”查詢(xún)執(zhí)行的結(jié)果生成摘要md5value和產(chǎn)生輸出格式;(1-4)將查詢(xún)結(jié)果寫(xiě)到磁盤(pán)文件outfile;(2)采用HadoopMapReduce并行框架求差分;(2-1)從map端讀入兩個(gè)快照文件old.txt和new.txt,通過(guò)文件按行切分在map端輸出〈key,imd5valueivalue>或者〈key,imd5value>的形式,其中imd5value@value或Omd5value作為Key/value結(jié)構(gòu)中的value值;(2-2)MapReduce的shuffle函數(shù)對(duì)Key/value結(jié)構(gòu)中相同key的value值存入迭代器iterator,發(fā)送reduce端;(2-3)reduce端接收的數(shù)據(jù)形式為〈key,iterator〉,對(duì)iterator中的value個(gè)數(shù)進(jìn)行統(tǒng)計(jì)和分類(lèi)可取獲得變化的數(shù)據(jù):(2-4)將reduce的輸出文件合并成insert文件和delete文件,即Q)C的結(jié)果。2.根據(jù)權(quán)利要求1所述.基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,所述查詢(xún)語(yǔ)句符合下述語(yǔ)法要求:(a)FIELDS子句的“輸出標(biāo)識(shí)符”、“段分隔符”、“屬性值分隔符”為可選項(xiàng);“輸出標(biāo)識(shí)符”可取三個(gè)值:缺省、’#’、’##,段分隔符”可缺省或者取除’#’和出現(xiàn)在該數(shù)據(jù)庫(kù)之外的其他符號(hào);“屬性值分隔符”可缺省或者取除和出現(xiàn)在該數(shù)據(jù)庫(kù)之外的符號(hào)段分隔符”和“屬性值分隔符”不能為相同的符號(hào);(b)若“輸出標(biāo)識(shí)符”缺省則“段分隔符”也一定缺省,該語(yǔ)句僅輸出每行元組的屬性值;(c)若“輸出標(biāo)識(shí)符”為時(shí),“段分隔符”不可缺省,該語(yǔ)句輸出每行元組的主碼值key和該行的摘要MD5value,由“段分隔符”將主碼值key和摘要MD5value分隔開(kāi);(d)若“輸出標(biāo)識(shí)符”為’##’時(shí),“段分隔符”不可缺省,該語(yǔ)句輸出每行元組的主碼值key、該行的摘要MD5value和屬性在該行的取值value,由“段分隔符”將主碼值key、摘要MD5value和值value分隔開(kāi);若定義了“屬性值分隔符”,則值value和key由“屬性值分隔符”將每個(gè)屬性值分隔開(kāi);(e)該查詢(xún)語(yǔ)句可用于一般查詢(xún),也可用于包含摘要的快照文件的生成;若將該查詢(xún)語(yǔ)句用于包含摘要的快照文件的生成,“輸出標(biāo)識(shí)符”取值’##’時(shí),必須定義“屬性值分隔符”,這樣方便計(jì)算變化的數(shù)據(jù);(f)子句LINES定義行分隔符,一般取值為“回車(chē)&換行”,不可缺省,方便按行讀取文件。3.根據(jù)權(quán)利要求1所述基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,步驟(1-1)的具體形式如下:(1-1-1)讀取FIELDSTERMINATEDBY的第一個(gè)字節(jié),若不為“#”,則置標(biāo)志位normal為true,表示查詢(xún)結(jié)果將按標(biāo)準(zhǔn)格式輸出到磁盤(pán)文件,否則置標(biāo)志位normal為false,表示查詢(xún)結(jié)果將按個(gè)性定義輸出到磁盤(pán)文件;(1-1-2)若標(biāo)志位normal為false,則讀取FIELDSTERMINATEDBY第二個(gè)字節(jié),若為“#,,,則置標(biāo)志位selfhood為true,表示輸出主碼值key和摘要md5value,否則置標(biāo)志位selfhood為false,表示輸出主碼值key、摘要md5value和整個(gè)元值的值value。4.根據(jù)權(quán)利要求1所述基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,步驟(1-3)具體為:(1-3-1)提取當(dāng)前行的數(shù)據(jù)分隔符;(1-3-2)取出當(dāng)前行的數(shù)據(jù)存于cache中并記錄下key值;(1-3-3)若標(biāo)志位normal為true,直接輸出cache中的數(shù)據(jù),轉(zhuǎn)下一行處理;(1-3-4)若標(biāo)志位normal為false,調(diào)用md5程序?yàn)閏ache中數(shù)據(jù)生成摘要md5value;(1-3-5)若標(biāo)志位selfhood為true,輸出主碼值key和摘要md5value,輸出格式為Okeyimd5value;(1-3-6)若標(biāo)志位selfhood為false,輸出主碼值key、摘要md5value和整個(gè)元組值value,輸出格式為0key@md5value@value。5.根據(jù)權(quán)利要求1所述基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,步驟(2-3)具體為:(2-3-1)若iterator僅有一個(gè)數(shù)據(jù),即該數(shù)據(jù)僅出現(xiàn)在一個(gè)快照文件中,說(shuō)明該數(shù)據(jù)是數(shù)據(jù)庫(kù)新插入insert或刪除delete的元組;(2-3-2)若iterator有二個(gè)數(shù)據(jù),即該數(shù)據(jù)出現(xiàn)在二個(gè)快照文件中,繼續(xù)比較二個(gè)數(shù)據(jù)中md5value的值,如果md5value值相同,說(shuō)明該數(shù)據(jù)沒(méi)有變化,如果md5value值不相同,說(shuō)明該數(shù)據(jù)是數(shù)據(jù)庫(kù)作了更新update操作的結(jié)果,將更新update操作分解為刪除delete操作和插入insert操作。6.根據(jù)權(quán)利要求1所述基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,步驟(2-4)中,采用帶值CDC算法或回查CDC算法對(duì)數(shù)據(jù)進(jìn)行處理,所述帶值CDC算法的處理方法如下:(2-4-1)從快照文件讀入一行數(shù)據(jù),取該行的第一個(gè)字符sign;(2-4-2)用sign切分剩下的字符串得到一個(gè)字符數(shù)組;(2-4-3)將字符數(shù)組的第一個(gè)元素作為key,剩余的元素作為value;(2-4-4)將切分后的數(shù)據(jù)傳給shuffle函數(shù);(2-4-5)經(jīng)過(guò)shuffle函數(shù)處理后的數(shù)據(jù)傳送到Reduce端,數(shù)據(jù)格式為〈key,iterator〉,取出iterator的第一個(gè)兀素valuel;(2-4-6)根據(jù)iterator中元素個(gè)數(shù)判斷數(shù)據(jù)庫(kù)的更新操作;(2-4-7)處理完〈key,iterator〉后的insert文件和delete文件即為數(shù)據(jù)庫(kù)變化數(shù)據(jù)文件。7.根據(jù)權(quán)利要求6所述基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,步驟(2-4-6)的具體步驟如下:(2-4-6-1)若iterator為空,則〈key,iterator〉的值為數(shù)據(jù)庫(kù)新插入或刪除操作產(chǎn)生的元組,讀出“段分隔符”將〈key,valuel〉插入insert文件或delete文件;(2-4-6-2)若iterator不為空,則取出iterator中的兀素valuel和兀素value2中的md5value,若valuel和value2中的md5value值相同,貝U數(shù)據(jù)庫(kù)對(duì)該元組沒(méi)有更新操作,否則〈key,iterator)為數(shù)據(jù)庫(kù)修改操作前和修改操作后的值,讀出valuel和value2的“段分隔符”將〈key,valuel〉和〈key,value2>分別插入insert文件和delete文件。8.根據(jù)權(quán)利要求6所述基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,所述回查CDC算法的處理方法如下:(2-5-1)從快照文件讀入一行數(shù)據(jù),取該行的第一個(gè)字符sign;(2-5-2)用sign切分剩下的字符串得到一個(gè)字符數(shù)組;(2-5-3)將字符數(shù)組的第一個(gè)元素作為key,剩余的元素作為value;(2-5-4)將切分后的數(shù)據(jù)傳給shuffle函數(shù);(2-5-5)經(jīng)過(guò)shuffle函數(shù)處理后的數(shù)據(jù)傳送到Reduce端,數(shù)據(jù)格式為〈key,iterator〉,取出iterator的第一個(gè)兀素valuel;(2-5-6)根據(jù)iterator中元素個(gè)數(shù)判斷數(shù)據(jù)庫(kù)的更新操作;(2-5-7)處理完〈key,iterator〉后的insert文件和delete文件即為數(shù)據(jù)庫(kù)變化數(shù)據(jù)文件。9.根據(jù)權(quán)利要求8所述基于MapReduce的MYSQL數(shù)據(jù)庫(kù)的變化數(shù)據(jù)捕獲方法,其特征在于,步驟(2-5-6)具體為:(2-5-6-1)若iterator為空,則〈key,iterator〉的值為數(shù)據(jù)庫(kù)新插入或刪除操作產(chǎn)生的元組,讀出“段分隔符”為舊快照標(biāo)識(shí)符,直接輸出到delete文件;讀出“段分隔符”為新快照標(biāo)識(shí)符,通過(guò)JDBC連接數(shù)據(jù)庫(kù)回查該key值對(duì)應(yīng)的元組值,將查詢(xún)結(jié)果輸出到insert文件;(2-5-6-2)若iterator不為空,則取出iterator中的兀素valuel和兀素value2中的md5value,若valuel和value2中的md5value值相同,貝U數(shù)據(jù)庫(kù)對(duì)該元組沒(méi)有更新操作,否則〈key,iterator)為數(shù)據(jù)庫(kù)修改操作前和修改操作后的值,若讀出valuel的“段分隔符”為舊快照標(biāo)識(shí)符,直接將valuel的key輸出到delete文件,通過(guò)JDBC連接數(shù)據(jù)庫(kù)回查該value2的key值對(duì)應(yīng)的元組值,將查詢(xún)結(jié)果輸出到insert文件,否則反之?!疚臋n編號(hào)】G06F17/30GK103440265SQ201310332312【公開(kāi)日】2013年12月11日申請(qǐng)日期:2013年8月1日優(yōu)先權(quán)日:2013年8月1日【發(fā)明者】鄒先霞,李鵬,杜威申請(qǐng)人:暨南大學(xué)