一種基于異或運(yùn)算的流計算跟蹤方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于異或運(yùn)算的流計算跟蹤方法及系統(tǒng)。
【背景技術(shù)】
[0002]流數(shù)據(jù)是一組順序、大量、快速、連續(xù)到達(dá)的數(shù)據(jù)序列,一般情況下,數(shù)據(jù)流可被視為一個隨時間延續(xù)而無限增長的動態(tài)數(shù)據(jù)集合。應(yīng)用于網(wǎng)絡(luò)監(jiān)控、傳感器網(wǎng)絡(luò)、航空航天、氣象測控和金融服務(wù)等領(lǐng)域。
[0003]流數(shù)據(jù)具有四個特點(diǎn):
[0004]I)數(shù)據(jù)實(shí)時到達(dá);
[0005]2)數(shù)據(jù)到達(dá)次序獨(dú)立,不受應(yīng)用系統(tǒng)所控制;
[0006]3)數(shù)據(jù)規(guī)模宏大且不能預(yù)知其最大值;
[0007]4)數(shù)據(jù)一經(jīng)處理,除非特意保存,否則不能被再次取出處理,或者再次提取數(shù)據(jù)代價昂貴。
[0008]過去的網(wǎng)絡(luò)服務(wù)提供商主要用傳統(tǒng)的網(wǎng)絡(luò)流量監(jiān)控方法,就是采用離線分析,SP先保存,在對其進(jìn)行數(shù)據(jù)挖掘等處理。但實(shí)際中的一些需求是:用戶要知道當(dāng)前網(wǎng)絡(luò)中的流量現(xiàn)狀。進(jìn)而根據(jù)當(dāng)前狀況采取可以提高服務(wù)性能的有利措施或者對有害行為進(jìn)行預(yù)警等。而要在監(jiān)控對象是實(shí)時、大量流數(shù)據(jù)的前提下,實(shí)現(xiàn)以上的需求,傳統(tǒng)的方法是不合適的。
【發(fā)明內(nèi)容】
[0009]本發(fā)明所要解決的技術(shù)問題是提供一種基于異或運(yùn)算的基本原理,通過對流數(shù)據(jù)進(jìn)行數(shù)據(jù)標(biāo)記,增加跟蹤器,來達(dá)到監(jiān)控整個數(shù)據(jù)流是否被完全處理的目的基于異或運(yùn)算的流計算跟蹤方法及系統(tǒng)。
[0010]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于異或運(yùn)算的流計算跟蹤方法,具體包括以下步驟:
[0011]步驟1:流生成器生成一個流數(shù)據(jù),并為所述流數(shù)據(jù)匹配一個唯一對應(yīng)的rootid,對所述流數(shù)據(jù)進(jìn)行處理,生成至少兩個子流數(shù)據(jù)和母id ;
[0012]步驟2:將rootid和母id發(fā)送到流跟蹤器,并將所有子流數(shù)據(jù)分別發(fā)送到不同的流處理器中,同時將rootid發(fā)送到每個流處理器中;
[0013]步驟3:按序選取一個流處理器作為當(dāng)前流處理器,將傳輸?shù)疆?dāng)前流處理器中的所有子流數(shù)據(jù)進(jìn)行處理生成新數(shù)據(jù),將新數(shù)據(jù)傳輸至下一個流處理器,同時將子流數(shù)據(jù)進(jìn)行異或運(yùn)算獲得第一子id,將rootid和第一子id發(fā)送到流跟蹤器;
[0014]步驟4:流跟蹤器將母id與第一子id做異或運(yùn)算,得到第一跟蹤id ;
[0015]步驟5:將接收新數(shù)據(jù)的下一個流處理器作為當(dāng)前流處理器;
[0016]步驟6:將傳輸?shù)疆?dāng)前流處理器中的所有新數(shù)據(jù)和/或子流數(shù)據(jù)進(jìn)行處理生成更新數(shù)據(jù),將更新數(shù)據(jù)傳輸至下一個流處理器,同時將新數(shù)據(jù)和/或子流數(shù)據(jù)進(jìn)行異或運(yùn)算獲得當(dāng)前子id,將rootid和當(dāng)前子id發(fā)送到流跟蹤器;
[0017]步驟7:流跟蹤器將第一跟蹤id與當(dāng)前子id做異或運(yùn)算,得到當(dāng)前跟蹤id,判斷當(dāng)前跟蹤id是否為零,如果是,執(zhí)行步驟8 ;否則,將更新數(shù)據(jù)作為新數(shù)據(jù)傳輸至下一個流處理器,執(zhí)行步驟5;
[0018]步驟8:當(dāng)前更新數(shù)據(jù)為空,對應(yīng)所述rootid的流數(shù)據(jù)處理完成。
[0019]本發(fā)明的有益效果是:本發(fā)明通過對數(shù)據(jù)增加跟蹤器,進(jìn)行數(shù)據(jù)標(biāo)記,通過簡單的異或運(yùn)算,解決了流數(shù)據(jù)處理中數(shù)據(jù)是否在制定的時間內(nèi)完全被處理的難題。本發(fā)明運(yùn)算量小,速度快,思路簡單巧妙,可用于所有流計算處理平臺。
[0020]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0021]進(jìn)一步,所述rootid將傳遞到流數(shù)據(jù)跟蹤器以及每一個流處理器,用于作為所述流數(shù)據(jù)的唯一標(biāo)識。
[0022]進(jìn)一步,所述流跟蹤器可同時處理多個流數(shù)據(jù),當(dāng)同時處理多個流數(shù)據(jù)時,將rootid作為唯一標(biāo)識識別是否為同一流數(shù)據(jù)。
[0023]進(jìn)一步,所述母id和所有子id采用64位整數(shù)進(jìn)行表示。
[0024]本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種基于異或運(yùn)算的流計算跟蹤系統(tǒng),包括生成模塊、發(fā)送模塊、處理模塊、運(yùn)算模塊、設(shè)定模塊、更新模塊和判斷模塊;
[0025]所述生成模塊用于流生成器生成一個流數(shù)據(jù),并為所述流數(shù)據(jù)匹配一個唯一對應(yīng)的rootid,對所述流數(shù)據(jù)進(jìn)行處理,生成至少兩個子流數(shù)據(jù)和母id ;
[0026]所述發(fā)送模塊用于將rootid和母id發(fā)送到流跟蹤器,并將所有子流數(shù)據(jù)分別發(fā)送到不同的流處理器中,同時將rootid發(fā)送到每個流處理器中;
[0027]所述處理模塊用于按序選取一個流處理器作為當(dāng)前流處理器,將傳輸?shù)疆?dāng)前流處理器中的所有子流數(shù)據(jù)進(jìn)行處理生成新數(shù)據(jù),將新數(shù)據(jù)傳輸至下一個流處理器,同時將子流數(shù)據(jù)進(jìn)行異或運(yùn)算獲得第一子id,將rootid和第一子id發(fā)送到流跟蹤器;
[0028]所述運(yùn)算模塊用于流跟蹤器將母id與第一子id做異或運(yùn)算,得到第一跟蹤id ;
[0029]所述設(shè)定模塊用于將接收新數(shù)據(jù)的下一個流處理器作為當(dāng)前流處理器;
[0030]所述更新模塊用于將傳輸?shù)疆?dāng)前流處理器中的所有新數(shù)據(jù)和/或子流數(shù)據(jù)進(jìn)行處理生成更新數(shù)據(jù),將更新數(shù)據(jù)傳輸至下一個流處理器,同時將新數(shù)據(jù)和/或子流數(shù)據(jù)進(jìn)行異或運(yùn)算獲得當(dāng)前子id,將rootid和當(dāng)前子id發(fā)送到流跟蹤器;
[0031]所述判斷模塊用于流跟蹤器將第一跟蹤id與當(dāng)前子id做異或運(yùn)算,得到當(dāng)前跟蹤id,判斷當(dāng)前跟蹤id是否為零,如果是,當(dāng)前更新數(shù)據(jù)為空,對應(yīng)所述rootid的流數(shù)據(jù)處理完成;否則,將更新數(shù)據(jù)作為新數(shù)據(jù)傳輸至下一個流處理器,觸發(fā)設(shè)定模塊。
[0032]本發(fā)明的有益效果是:本發(fā)明通過對數(shù)據(jù)增加跟蹤器,進(jìn)行數(shù)據(jù)標(biāo)記,通過簡單的異或運(yùn)算,解決了流數(shù)據(jù)處理中數(shù)據(jù)是否在制定的時間內(nèi)完全被處理的難題。本發(fā)明運(yùn)算量小,速度快,思路簡單巧妙,可用于所有流計算處理平臺。
[0033]在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
[0034]進(jìn)一步,所述rootid將傳遞到流數(shù)據(jù)跟蹤器以及每一個流處理器,用于作為所述流數(shù)據(jù)的唯一標(biāo)識。
[0035]進(jìn)一步,所述流跟蹤器可同時處理多個流數(shù)據(jù),當(dāng)同時處理多個流數(shù)據(jù)時,將rootid作為唯一標(biāo)識識別是否為同一流數(shù)據(jù)。
[0036]進(jìn)一步,所述母id和所有子id采用64位整數(shù)進(jìn)行表示。
[0037]在流數(shù)據(jù)處理系統(tǒng)中,每一個生成流數(shù)據(jù)的數(shù)據(jù)生成器會給生成的每一條數(shù)據(jù)對應(yīng)一個64位的整數(shù),作為rootid,rootid會傳遞給流數(shù)據(jù)跟蹤器以及每一個流數(shù)據(jù)器來作為該數(shù)據(jù)的唯一標(biāo)示。同時,無論是流數(shù)據(jù)生成器還是處理器,當(dāng)他基于輸入的數(shù)據(jù)有產(chǎn)生一個新的數(shù)據(jù)時,都會賦予新數(shù)據(jù)一個64位的整數(shù)id。當(dāng)數(shù)據(jù)生成器將數(shù)據(jù)傳遞給數(shù)據(jù)處理器的時候,會告知數(shù)據(jù)跟蹤器自己發(fā)送數(shù)據(jù)的rootid和生成的數(shù)據(jù)id,而數(shù)據(jù)處理器每次接收到一個數(shù)據(jù)并且處理完畢后,會告知數(shù)據(jù)跟蹤器自己處理的輸入數(shù)據(jù)的id和新生成的數(shù)據(jù)的id。數(shù)據(jù)跟蹤器只要對這些id做一個簡單的異或運(yùn)算,就能判斷出該rootid對應(yīng)的數(shù)據(jù)是否處理完畢。
[0038]本發(fā)明數(shù)學(xué)原理:
[0039]A xor A = 0.
[0040]A xor B…xor B xor A = 0,其中每一個操作數(shù)出現(xiàn)且僅出現(xiàn)兩次;
[0041]xor代表異或運(yùn)算。
【附圖說明】
[0042]圖1為本發(fā)明所述的一種基于異或運(yùn)算的流計算跟蹤方法流程圖;
[0043]圖2為本發(fā)明所述的一種基于異或運(yùn)算的流計算跟蹤系統(tǒng)結(jié)構(gòu)框圖;
[0044]圖3為本發(fā)明具體實(shí)施例2的流生成器的數(shù)據(jù)流向圖;
[0045]圖4為本發(fā)明具體實(shí)施例2的流處理器的數(shù)據(jù)流向圖;
[0046]圖5為本發(fā)明具體實(shí)施例2的另一個流生成器的數(shù)據(jù)流向圖;
[0047]圖6為本發(fā)明具體實(shí)施例2的第三個流生成器的數(shù)據(jù)流向圖。
[0048]附圖中,各標(biāo)號所代表的部件列表如下:
[0049]1、生成模塊,2、發(fā)送模塊,3、處理模塊,4、運(yùn)算模塊,5、設(shè)定模塊,6、更新模塊,7、
判斷模塊。
【具體實(shí)施方式】
[0050]以下結(jié)合附圖對本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
[0051]如圖1所示,為本發(fā)明所述的一種基于異或運(yùn)算的流計算跟蹤方法,具體包括以下步驟:
[0052]步驟1:流生成器生成一個流數(shù)據(jù),并為所述流數(shù)據(jù)匹配一個唯一對應(yīng)的rootid,對所述流數(shù)據(jù)進(jìn)行處理,生成至少兩個子流數(shù)據(jù)和母id ;
[0053]步驟2:將rootid和母id發(fā)送到流跟蹤器,并將所有子流數(shù)據(jù)分別發(fā)送到不同的流處理器中,同時將rootid發(fā)送到每個流處理器中;
[0054]步驟3:按序選取一個流處理器作為當(dāng)前流處理器,將傳輸?shù)疆?dāng)前流處理器中的所有子流數(shù)據(jù)進(jìn)行處理生成新數(shù)據(jù),將新數(shù)據(jù)傳輸至下一個流處理器,同時將子流數(shù)據(jù)進(jìn)行異或運(yùn)算獲得第一子id,將rootid和第一子id發(fā)送到流跟蹤器;
[0055]步驟4:流跟蹤器將母id與第一子id做異或運(yùn)算,得到第一跟蹤id ;
[0056]步驟5:將接收新數(shù)據(jù)的下一個流處理器作為當(dāng)前流處理器;
[0057]步驟6:將傳輸?shù)疆?dāng)前流處理器中的所有新數(shù)據(jù)和/或子流數(shù)據(jù)進(jìn)行處理生成更新數(shù)據(jù),將更新數(shù)據(jù)傳輸至下一個流處理器,同時將新數(shù)據(jù)和/或子流數(shù)據(jù)進(jìn)行異或運(yùn)算獲得當(dāng)前子id,將rootid和當(dāng)前子id發(fā)送到流跟蹤器;
[0058]步驟7:流跟蹤器將第一跟蹤id與當(dāng)前子id做異或運(yùn)算,得到當(dāng)前跟蹤id,判斷當(dāng)前跟蹤id是否為零,如果是,執(zhí)行步驟8 ;否則,將更新數(shù)據(jù)作為新數(shù)據(jù)傳輸至下一個流處理器,執(zhí)行步驟5;
[0059]步驟8:當(dāng)前更新數(shù)據(jù)為空,對應(yīng)所述rootid的流數(shù)據(jù)處理完成。
[0060]所述rootid將傳遞到流數(shù)據(jù)跟蹤器以及每一個流處理器,用于作為所述流數(shù)據(jù)的唯一標(biāo)識。
[0061]所述流跟蹤器可同時處理多個流數(shù)據(jù),當(dāng)同時處理多個流數(shù)據(jù)時,將rootid作為唯一標(biāo)識識別是否為同一流數(shù)據(jù)。
[0062]所述母id和所有子id采用64位整數(shù)進(jìn)行表示。
[0063]如圖2所示,為