国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于MapReduce的MYSQL數(shù)據(jù)庫的變化數(shù)據(jù)捕獲方法

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