本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,特別涉及一種數(shù)據(jù)比對方法和系統(tǒng)。
背景技術(shù):
用戶的積分?jǐn)?shù)據(jù)通常存儲在兩個數(shù)據(jù)平臺,一個是各省的移動ngboss系統(tǒng),另一個是積分平臺的數(shù)據(jù)庫中。由于積分平臺數(shù)據(jù)庫和各省移動ngboss系統(tǒng)的獨(dú)立性,再加上業(yè)務(wù)受理時通常采用異步處理以及移動ngboss系統(tǒng)或積分平臺數(shù)據(jù)庫存在故障等原因,會導(dǎo)致部分用戶的積分?jǐn)?shù)據(jù)在兩個平臺之間出現(xiàn)不一致的現(xiàn)象。所以,兩個平臺的數(shù)據(jù)需要定期(按天、按周或按月等)進(jìn)行比對,并對差異數(shù)據(jù)進(jìn)行分析和處理。現(xiàn)有技術(shù)中,類似這樣的兩套系統(tǒng)、兩份數(shù)據(jù)的業(yè)務(wù)有很多,經(jīng)常需要對數(shù)據(jù)進(jìn)行比對。由于這些業(yè)務(wù)的業(yè)務(wù)邏輯存在差異,每類業(yè)務(wù)在移動ngboss系統(tǒng)或者積分平臺的數(shù)據(jù)格式各不相同,數(shù)據(jù)庫取值的sql腳本也各不相同。因此,每當(dāng)需要對新增的業(yè)務(wù)數(shù)據(jù)進(jìn)行一致性比對時,都需要新增一套程序進(jìn)行處理,這樣不僅增加工作量,而且給后期維護(hù)造成了困難,非常消耗開發(fā)和運(yùn)維成本。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供了一種數(shù)據(jù)比對方法和系統(tǒng),解決了以上所述的技術(shù)問題。
本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下:一種數(shù)據(jù)比對方法,包括以下步驟:
步驟1,讀取預(yù)設(shè)的配置文件,并根據(jù)所述配置文件獲取對應(yīng)的第一配置表;
步驟2,根據(jù)所述第一配置表,獲取第一數(shù)據(jù)平臺的第一比對數(shù)據(jù)和第二數(shù)據(jù)平臺的第二比對數(shù)據(jù);
步驟3,比較第一比對數(shù)據(jù)和第二比對數(shù)據(jù),生成包含差異數(shù)據(jù)的比對結(jié)果;
步驟4,將所述比對結(jié)果存入第一數(shù)據(jù)平臺和/或第二數(shù)據(jù)平臺。
本發(fā)明的有益效果是:本發(fā)明可以對所有類似存在數(shù)據(jù)一致性差異的業(yè)務(wù)進(jìn)行分析和處理,同時比對方法不用區(qū)分具體的業(yè)務(wù)邏輯,通過讀取預(yù)設(shè)的配置文件即可獲得差異數(shù)據(jù),并可將差異數(shù)據(jù)直接存入數(shù)據(jù)庫或者生成文件,各個業(yè)務(wù)模塊的負(fù)責(zé)人只需要進(jìn)行數(shù)據(jù)配置,然后提取差異數(shù)據(jù)進(jìn)行分析即可。本發(fā)明方法的數(shù)據(jù)比對過程清晰明了,簡單易懂;數(shù)據(jù)比對過程與業(yè)務(wù)邏輯相分離,數(shù)據(jù)比對過程不用關(guān)心具體的業(yè)務(wù)數(shù)據(jù),因此不需要用戶重新編寫程序;同時本發(fā)明生成的差異數(shù)據(jù)可以按照規(guī)定格式入庫或生成文件,方便后期分析和處理。與現(xiàn)有技術(shù)的操作流程相比,本發(fā)明極大程度上簡化了數(shù)據(jù)比對的步驟,降低了運(yùn)維成本,減少了重復(fù)開發(fā)代碼的工作。
在上述技術(shù)方案的基礎(chǔ)上,本發(fā)明還可以做如下改進(jìn)。
進(jìn)一步,所述步驟1具體為:讀取預(yù)設(shè)的配置文件,判斷所述配置文件中是否包含配置表id,若是,則根據(jù)所述配置表id獲取對應(yīng)的第一配置表,若否,則從預(yù)先存儲的所有第一配置表中進(jìn)行選擇,每次選擇一個不同的第一配置表,并執(zhí)行步驟2。
采用上述進(jìn)一步方案的有益效果是:本進(jìn)一步技術(shù)方案中,通過查詢配置文件中的配置表id,即可獲取需要進(jìn)行數(shù)據(jù)對比的數(shù)據(jù)平臺所對應(yīng)的第一配置表,當(dāng)查詢不到配置表id時,說明所有的第一配置表均需要被依次獲取到,即所有的預(yù)設(shè)數(shù)據(jù)平臺的數(shù)據(jù)均需要進(jìn)行比對,查詢和獲取方式簡單且速度快。
進(jìn)一步,所述步驟2包括以下步驟:
s201,查詢所述第一配置表,獲取第一數(shù)據(jù)平臺的第一業(yè)務(wù)模版id和第二數(shù)據(jù)平臺的第二業(yè)務(wù)模版id;
s202,根據(jù)所述第一業(yè)務(wù)模板id獲取第一數(shù)據(jù)平臺對應(yīng)的第二配置表,并根據(jù)所述第二業(yè)務(wù)模板id獲取第二數(shù)據(jù)平臺對應(yīng)的第三配置表;
s203,根據(jù)所述第二配置表獲取第一數(shù)據(jù)平臺的數(shù)據(jù)格式和對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)第一數(shù)據(jù)平臺的數(shù)據(jù)獲取方式從所述第一數(shù)據(jù)平臺中獲取對應(yīng)的第一比對數(shù)據(jù);以及根據(jù)所述第三配置表獲取第二數(shù)據(jù)平臺的數(shù)據(jù)格式和對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)第二數(shù)據(jù)平臺的數(shù)據(jù)獲取方式從所述第二數(shù)據(jù)平臺中獲取對應(yīng)的第二比對數(shù)據(jù)。
采用上述進(jìn)一步方案的有益效果是:本進(jìn)一步技術(shù)方案中,所述第一配置表為cs_balancerela_dict表,所述第二配置表和第三配置表均為cs_balancetemplate_dict表,通過預(yù)先對cs_balancerela_dict表和cs_balancetemplate_dict表進(jìn)行配置,即可設(shè)置待比對數(shù)據(jù)的格式以及獲取方式,從而方便地獲取到兩個數(shù)據(jù)平臺的待比對數(shù)據(jù),獲取方式簡單且速度快。
進(jìn)一步,步驟s203中,當(dāng)所述數(shù)據(jù)格式為文件類,且所述數(shù)據(jù)獲取方式包括文件路徑時,通過ftp連接方式連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的主機(jī)中,并按照所述文件路徑獲取對應(yīng)的文件作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù);
或者當(dāng)所述數(shù)據(jù)格式為sql腳本類,且所述數(shù)據(jù)獲取方式包括取值方式時,則連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的數(shù)據(jù)庫,并根據(jù)所述取值方式獲取對應(yīng)的數(shù)據(jù)作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)。
采用上述進(jìn)一步方案的有益效果是:本進(jìn)一步技術(shù)方案中,可以針對不同數(shù)據(jù)格式的數(shù)據(jù)設(shè)定不同的數(shù)據(jù)獲取方式,同時兩個數(shù)據(jù)平臺的數(shù)據(jù)格式和數(shù)據(jù)獲取方式可以不同,因此本發(fā)明方法的適用范圍更加廣泛,可以在更多的業(yè)務(wù)中進(jìn)行使用。
進(jìn)一步,所述步驟3具體包括以下步驟:
s301,判斷所述第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)是否達(dá)到預(yù)設(shè)的數(shù)據(jù)量閾值,若是,執(zhí)行s302,若否,則執(zhí)行s303;
s302,對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時表和第二數(shù)據(jù)平臺的第二臨時表中,然后循環(huán)遍歷第一臨時表中的key,并到第二臨時表中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時表中存在所述key且對應(yīng)的value值相同,則將所述第一臨時表和第二臨時表中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時表和第二臨時表中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后執(zhí)行s304;
s303,對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時緩存和第二數(shù)據(jù)平臺的第二臨時緩存中,然后循環(huán)遍歷第一臨時緩存中的key,并到第二臨時緩存中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時緩存中存在所述key且對應(yīng)的value值相同,則將所述第一臨時緩存和第二臨時緩存中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時緩存和第二臨時緩存中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后執(zhí)行s304;
s304,將差異數(shù)據(jù)寫入預(yù)設(shè)格式的流水表或者文件中,生成比對結(jié)果。
采用上述進(jìn)一步方案的有益效果是:本進(jìn)一步技術(shù)方案中,針對需要進(jìn)行數(shù)據(jù)比對的數(shù)據(jù)量大小采用不同的對比方式,當(dāng)數(shù)據(jù)量較大時采用臨時表的方式進(jìn)行比對,當(dāng)數(shù)據(jù)量較小時,采用臨時緩存的方式進(jìn)行比對,不僅比對速度快,而且節(jié)省了系統(tǒng)資源。
為了解決本發(fā)明的技術(shù)問題,還提供了一種數(shù)據(jù)比對系統(tǒng),包括:
讀取模塊,用于讀取預(yù)設(shè)的配置文件,并根據(jù)所述配置文件獲取對應(yīng)的第一配置表;
數(shù)據(jù)獲取模塊,用于根據(jù)所述第一配置表,獲取第一數(shù)據(jù)平臺的第一比對數(shù)據(jù)和第二數(shù)據(jù)平臺的第二比對數(shù)據(jù);
比較模塊,用于比較第一比對數(shù)據(jù)和第二比對數(shù)據(jù),生成包含差異數(shù)據(jù)的比對結(jié)果;
寫入模塊,用于將所述比對結(jié)果存入第一數(shù)據(jù)平臺和/或第二數(shù)據(jù)平臺;
存儲模塊,用于存儲預(yù)設(shè)的配置文件。
本發(fā)明的有益效果是:本發(fā)明可以對所有類似存在數(shù)據(jù)一致性差異的業(yè)務(wù)進(jìn)行分析和處理,同時比對方法不用區(qū)分具體的業(yè)務(wù)邏輯,通過配置不同的數(shù)據(jù)文件格式或數(shù)據(jù)庫取值sql等,即可獲得差異數(shù)據(jù),并可將差異數(shù)據(jù)直接存入數(shù)據(jù)庫或者生成文件,各個業(yè)務(wù)模塊的負(fù)責(zé)人只需要進(jìn)行數(shù)據(jù)配置,然后提取差異數(shù)據(jù)進(jìn)行分析即可。本發(fā)明極大程度上簡化了數(shù)據(jù)比對的步驟,降低了運(yùn)維成本,減少了重復(fù)開發(fā)代碼的工作。
進(jìn)一步,所述讀取模塊具體用于讀取預(yù)設(shè)的配置文件,判斷所述配置文件中是否包含配置表id,若是,則根據(jù)所述配置表id獲取對應(yīng)的第一配置表并驅(qū)動比較模塊,若否,則從預(yù)先存儲的所有第一配置表中進(jìn)行選擇,每次選擇一個不同的第一配置表,并驅(qū)動比較模塊。
進(jìn)一步,所述數(shù)據(jù)獲取模塊具體包括:
第一查詢單元,用于查詢所述第一配置表,獲取第一數(shù)據(jù)平臺的第一業(yè)務(wù)模版id和第二數(shù)據(jù)平臺的第二業(yè)務(wù)模版id;
第二查詢單元,用于根據(jù)所述第一業(yè)務(wù)模板id獲取第一數(shù)據(jù)平臺對應(yīng)的第二配置表,并根據(jù)所述第二業(yè)務(wù)模板id獲取第二數(shù)據(jù)平臺對應(yīng)的第三配置表;
數(shù)據(jù)獲取單元,用于根據(jù)所述第二配置表獲取第一數(shù)據(jù)平臺的數(shù)據(jù)格式和所述數(shù)據(jù)格式對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)所述數(shù)據(jù)獲取方式從所述第一數(shù)據(jù)平臺中獲取對應(yīng)的第一比對數(shù)據(jù);以及用于根據(jù)所述第三配置表獲取第二數(shù)據(jù)平臺的數(shù)據(jù)格式和所述數(shù)據(jù)格式對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)所述數(shù)據(jù)獲取方式從所述第二數(shù)據(jù)平臺中獲取對應(yīng)的第二比對數(shù)據(jù)。
進(jìn)一步,當(dāng)所述數(shù)據(jù)格式為文件類,且所述數(shù)據(jù)獲取方式包括文件路徑時,所述獲取模塊用于通過ftp連接方式連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的主機(jī)中,并按照所述文件路徑獲取對應(yīng)的文件作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù);
或者當(dāng)所述數(shù)據(jù)格式為sql腳本類,且所述數(shù)據(jù)獲取方式包括取值方式時,所述獲取模塊用于連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的數(shù)據(jù)庫,并根據(jù)所述取值方式獲取對應(yīng)的數(shù)據(jù)作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)。
進(jìn)一步,所述比較模塊具體包括:
判斷單元,用于判斷所述第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)是否達(dá)到預(yù)設(shè)的數(shù)據(jù)量閾值,若是,驅(qū)動第一比較單元,若否,則驅(qū)動第二比較單元;
第一比較單元,用于對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時表和第二數(shù)據(jù)平臺的第二臨時表中,然后循環(huán)遍歷第一臨時表中的key,并到第二臨時表中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時表中存在所述key且對應(yīng)的value值相同,則將所述第一臨時表和第二臨時表中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時表和第二臨時表中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后驅(qū)動比對結(jié)果生成單元;
第二比較單元,用于對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時緩存和第二數(shù)據(jù)平臺的第二臨時緩存中,然后循環(huán)遍歷第一臨時緩存中的key,并到第二臨時緩存中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時緩存中存在所述key且對應(yīng)的value值相同,則將所述第一臨時緩存和第二臨時緩存中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時緩存和第二臨時緩存中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后驅(qū)動比對結(jié)果生成單元;
比對結(jié)果生成單元,用于將差異數(shù)據(jù)寫入預(yù)設(shè)格式的流水表或者文件中,生成比對結(jié)果。
本發(fā)明附加的方面的優(yōu)點(diǎn)將在下面的描述中部分給出,部分將從下面的描述中變得明顯,或通過本發(fā)明實(shí)踐了解到。
附圖說明
圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)比對方法的示意性流程圖;
圖2為本發(fā)明另一實(shí)施例提供的一種數(shù)據(jù)比對方法中步驟2的示意性流程圖;
圖3為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)比對系統(tǒng)的示意性結(jié)構(gòu)圖;
圖4為本發(fā)明另一實(shí)施例提供的一種數(shù)據(jù)比對系統(tǒng)中數(shù)據(jù)獲取模塊的示意性結(jié)構(gòu)圖;
圖5為本發(fā)明另一實(shí)施例提供的一種數(shù)據(jù)比對系統(tǒng)中比較模塊的示意性結(jié)構(gòu)圖。
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。
圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)比對方法的示意性流程圖,如圖1所示,包括以下步驟:
步驟1,讀取預(yù)設(shè)的配置文件,并根據(jù)所述配置文件獲取對應(yīng)的第一配置表;
步驟2,根據(jù)所述第一配置表,獲取第一數(shù)據(jù)平臺的第一比對數(shù)據(jù)和第二數(shù)據(jù)平臺的第二比對數(shù)據(jù);
步驟3,比較第一比對數(shù)據(jù)和第二比對數(shù)據(jù),生成包含差異數(shù)據(jù)的比對結(jié)果;
步驟4,將所述比對結(jié)果存入第一數(shù)據(jù)平臺和/或第二數(shù)據(jù)平臺。
本實(shí)施例可以對所有類似存在數(shù)據(jù)一致性差異的業(yè)務(wù)進(jìn)行分析和處理,同時比對方法不用區(qū)分具體的業(yè)務(wù)邏輯,通過讀取預(yù)設(shè)的配置文件即可獲得差異數(shù)據(jù),并可將差異數(shù)據(jù)直接存入數(shù)據(jù)庫或者生成文件,各個業(yè)務(wù)模塊的負(fù)責(zé)人只需要進(jìn)行數(shù)據(jù)配置,然后提取差異數(shù)據(jù)進(jìn)行分析即可。本發(fā)明方法的數(shù)據(jù)比對過程清晰明了,簡單易懂;數(shù)據(jù)比對過程與業(yè)務(wù)邏輯相分離,數(shù)據(jù)比對過程不用關(guān)心具體的業(yè)務(wù)數(shù)據(jù),因此不需要用戶重新編寫程序;同時本發(fā)明生成的差異數(shù)據(jù)可以按照規(guī)定格式入庫或生成文件,方便后期分析和處理。與現(xiàn)有技術(shù)的操作流程相比,本發(fā)明極大程度上簡化了數(shù)據(jù)比對的步驟,降低了運(yùn)維成本,減少了重復(fù)開發(fā)代碼的工作。
在優(yōu)選實(shí)施例中,所述步驟1具體為:讀取預(yù)設(shè)的配置文件,判斷所述配置文件中是否包含配置表id,若是,則根據(jù)所述配置表id獲取對應(yīng)的第一配置表,若否,則從預(yù)先存儲的所有第一配置表中進(jìn)行選擇,每次選擇一個不同的第一配置表,并執(zhí)行步驟2。該優(yōu)選實(shí)施例通過查詢配置文件中的配置表id,即可獲取需要進(jìn)行數(shù)據(jù)對比的數(shù)據(jù)平臺所對應(yīng)的第一配置表,當(dāng)查詢不到配置表id時,說明所有的第一配置表均需要被依次獲取到,即所有的預(yù)設(shè)數(shù)據(jù)平臺的數(shù)據(jù)均需要進(jìn)行比對,查詢和獲取方式簡單且速度快。
圖2為優(yōu)選實(shí)施例中步驟2的流程示意圖,如圖2所示,所述步驟2包括以下步驟:
s201,查詢所述第一配置表,獲取第一數(shù)據(jù)平臺的第一業(yè)務(wù)模版id和第二數(shù)據(jù)平臺的第二業(yè)務(wù)模版id;
s202,根據(jù)所述第一業(yè)務(wù)模板id獲取第一數(shù)據(jù)平臺對應(yīng)的第二配置表,并根據(jù)所述第二業(yè)務(wù)模板id獲取第二數(shù)據(jù)平臺對應(yīng)的第三配置表;
s203,根據(jù)所述第二配置表獲取第一數(shù)據(jù)平臺的數(shù)據(jù)格式和對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)第一數(shù)據(jù)平臺的數(shù)據(jù)獲取方式從所述第一數(shù)據(jù)平臺中獲取對應(yīng)的第一比對數(shù)據(jù);以及根據(jù)所述第三配置表獲取第二數(shù)據(jù)平臺的數(shù)據(jù)格式和對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)第二數(shù)據(jù)平臺的數(shù)據(jù)獲取方式從所述第二數(shù)據(jù)平臺中獲取對應(yīng)的第二比對數(shù)據(jù)。
上述優(yōu)選實(shí)施例中,所述第一配置表為cs_balancerela_dict表,所述第二配置表和第三配置表均為cs_balancetemplate_dict表,通過預(yù)先對cs_balancerela_dict表和cs_balancetemplate_dict表進(jìn)行配置,即可設(shè)置待比對數(shù)據(jù)的格式以及獲取方式,從而方便地獲取到兩個數(shù)據(jù)平臺的待比對數(shù)據(jù),獲取方式簡單且速度快。具體的cs_balancerela_dict表和cs_balancetemplate_dict表分別如下表1、表2所示:
表1cs_balancerela_dict表
表2cs_balancetemplate_dict表
在優(yōu)選實(shí)施例中,步驟s203中,當(dāng)所述數(shù)據(jù)格式為文件類,且所述數(shù)據(jù)獲取方式包括文件路徑時,通過ftp連接方式連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的主機(jī)中,并按照所述文件路徑獲取對應(yīng)的文件作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù);
或者當(dāng)所述數(shù)據(jù)格式為sql腳本類,且所述數(shù)據(jù)獲取方式包括取值方式時,則連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的數(shù)據(jù)庫,并根據(jù)所述取值方式獲取對應(yīng)的數(shù)據(jù)作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)。
上述優(yōu)選實(shí)施例可以針對不同數(shù)據(jù)格式的數(shù)據(jù)設(shè)定不同的數(shù)據(jù)獲取方式,同時兩個數(shù)據(jù)平臺的數(shù)據(jù)格式和數(shù)據(jù)獲取方式可以不同,因此本發(fā)明方法的適用范圍更加廣泛,可以在更多的業(yè)務(wù)中進(jìn)行使用。
優(yōu)選實(shí)施例中,所述步驟3包括以下步驟:
s301,判斷所述第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)是否達(dá)到預(yù)設(shè)的數(shù)據(jù)量閾值,若是,執(zhí)行s302,若否,則執(zhí)行s303;
s302,對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時表和第二數(shù)據(jù)平臺的第二臨時表中,然后循環(huán)遍歷第一臨時表中的key,并到第二臨時表中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時表中存在所述key且對應(yīng)的value值相同,則將所述第一臨時表和第二臨時表中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時表和第二臨時表中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后執(zhí)行s304;
s303,對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時緩存和第二數(shù)據(jù)平臺的第二臨時緩存中,然后循環(huán)遍歷第一臨時緩存中的key,并到第二臨時緩存中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時緩存中存在所述key且對應(yīng)的value值相同,則將所述第一臨時緩存和第二臨時緩存中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時緩存和第二臨時緩存中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后執(zhí)行s304;
s304,將差異數(shù)據(jù)寫入預(yù)設(shè)格式的流水表或者文件中,生成比對結(jié)果。具體實(shí)施例中,所述流水表可以采用cs_balanceresult_yyyymm的格式,具體如表3所示,
表3cs_balanceresult_yyyymm
上述優(yōu)選實(shí)施例可以針對需要進(jìn)行數(shù)據(jù)比對的數(shù)據(jù)量大小采用不同的對比方式,當(dāng)數(shù)據(jù)量較大時采用臨時表的方式進(jìn)行比對,當(dāng)數(shù)據(jù)量較小時,采用臨時緩存的方式進(jìn)行比對,不僅比對速度快,而且節(jié)省了系統(tǒng)資源。
圖3為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)比對系統(tǒng)的示意性結(jié)構(gòu)圖,如圖3所示,包括:
讀取模塊,用于讀取預(yù)設(shè)的配置文件,并根據(jù)所述配置文件獲取對應(yīng)的第一配置表;
數(shù)據(jù)獲取模塊,用于根據(jù)所述第一配置表,獲取第一數(shù)據(jù)平臺的第一比對數(shù)據(jù)和第二數(shù)據(jù)平臺的第二比對數(shù)據(jù);
比較模塊,用于比較第一比對數(shù)據(jù)和第二比對數(shù)據(jù),生成包含差異數(shù)據(jù)的比對結(jié)果;
寫入模塊,用于將所述比對結(jié)果存入第一數(shù)據(jù)平臺和/或第二數(shù)據(jù)平臺;
存儲模塊,用于存儲預(yù)設(shè)的配置文件。
本實(shí)施例可以對所有類似存在數(shù)據(jù)一致性差異的業(yè)務(wù)進(jìn)行分析和處理,同時比對方法不用區(qū)分具體的業(yè)務(wù)邏輯,通過配置不同的數(shù)據(jù)文件格式或數(shù)據(jù)庫取值sql等,即可獲得差異數(shù)據(jù),并可將差異數(shù)據(jù)直接存入數(shù)據(jù)庫或者生成文件,各個業(yè)務(wù)模塊的負(fù)責(zé)人只需要進(jìn)行數(shù)據(jù)配置,然后提取差異數(shù)據(jù)進(jìn)行分析即可。本發(fā)明極大程度上簡化了數(shù)據(jù)比對的步驟,降低了運(yùn)維成本,減少了重復(fù)開發(fā)代碼的工作。
在優(yōu)選實(shí)施例中,所述讀取模塊具體用于讀取預(yù)設(shè)的配置文件,判斷所述配置文件中是否包含配置表id,若是,則根據(jù)所述配置表id獲取對應(yīng)的第一配置表并驅(qū)動比較模塊,若否,則從預(yù)先存儲的所有第一配置表中進(jìn)行選擇,每次選擇一個不同的第一配置表,并驅(qū)動比較模塊。該優(yōu)選實(shí)施例通過查詢配置文件中的配置表id,即可獲取需要進(jìn)行數(shù)據(jù)對比的數(shù)據(jù)平臺所對應(yīng)的第一配置表,當(dāng)查詢不到配置表id時,說明所有的第一配置表均需要被依次獲取到,即所有的預(yù)設(shè)數(shù)據(jù)平臺的數(shù)據(jù)均需要進(jìn)行比對,查詢和獲取方式簡單且速度快。
圖4為一個優(yōu)選實(shí)施例中所述數(shù)據(jù)獲取模塊的結(jié)構(gòu)示意圖,如圖4所示,包括:
第一查詢單元,用于查詢所述第一配置表,獲取第一數(shù)據(jù)平臺的第一業(yè)務(wù)模版id和第二數(shù)據(jù)平臺的第二業(yè)務(wù)模版id;
第二查詢單元,用于根據(jù)所述第一業(yè)務(wù)模板id獲取第一數(shù)據(jù)平臺對應(yīng)的第二配置表,并根據(jù)所述第二業(yè)務(wù)模板id獲取第二數(shù)據(jù)平臺對應(yīng)的第三配置表;
數(shù)據(jù)獲取單元,用于根據(jù)所述第二配置表獲取第一數(shù)據(jù)平臺的數(shù)據(jù)格式和所述數(shù)據(jù)格式對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)所述數(shù)據(jù)獲取方式從所述第一數(shù)據(jù)平臺中獲取對應(yīng)的第一比對數(shù)據(jù);以及用于根據(jù)所述第三配置表獲取第二數(shù)據(jù)平臺的數(shù)據(jù)格式和所述數(shù)據(jù)格式對應(yīng)的數(shù)據(jù)獲取方式,并根據(jù)所述數(shù)據(jù)獲取方式從所述第二數(shù)據(jù)平臺中獲取對應(yīng)的第二比對數(shù)據(jù)。
上述優(yōu)選實(shí)施例中,所述第一配置表為cs_balancerela_dict表,所述第二配置表和第三配置表均為cs_balancetemplate_dict表,通過預(yù)先對cs_balancerela_dict表和cs_balancetemplate_dict表進(jìn)行配置,即可設(shè)置待比對數(shù)據(jù)的格式以及獲取方式,從而方便地獲取到兩個數(shù)據(jù)平臺的待比對數(shù)據(jù),獲取方式簡單且速度快。
在另一優(yōu)選實(shí)施例中,當(dāng)所述數(shù)據(jù)格式為文件類,且所述數(shù)據(jù)獲取方式包括文件路徑時,所述獲取模塊用于通過ftp連接方式連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的主機(jī)中,并按照所述文件路徑獲取對應(yīng)的文件作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù);
或者當(dāng)所述數(shù)據(jù)格式為sql腳本類,且所述數(shù)據(jù)獲取方式包括取值方式時,所述獲取模塊用于連接到第一數(shù)據(jù)平臺或第二數(shù)據(jù)平臺的數(shù)據(jù)庫,并根據(jù)所述取值方式獲取對應(yīng)的數(shù)據(jù)作為第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)。上述優(yōu)選實(shí)施例可以針對不同數(shù)據(jù)格式的數(shù)據(jù)設(shè)定不同的數(shù)據(jù)獲取方式,同時兩個數(shù)據(jù)平臺的數(shù)據(jù)格式和數(shù)據(jù)獲取方式可以不同,因此本發(fā)明方法的適用范圍更加廣泛,可以在更多的業(yè)務(wù)中進(jìn)行使用。
圖5為一個優(yōu)選實(shí)施例中所述比較模塊的結(jié)構(gòu)示意圖,如圖5所示,包括:
判斷單元,用于判斷所述第一比對數(shù)據(jù)或者第二比對數(shù)據(jù)是否達(dá)到預(yù)設(shè)的數(shù)據(jù)量閾值,若是,驅(qū)動第一比較單元,若否,則驅(qū)動第二比較單元;
第一比較單元,用于對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時表和第二數(shù)據(jù)平臺的第二臨時表中,然后循環(huán)遍歷第一臨時表中的key,并到第二臨時表中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時表中存在所述key且對應(yīng)的value值相同,則將所述第一臨時表和第二臨時表中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時表和第二臨時表中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后驅(qū)動比對結(jié)果生成單元;
第二比較單元,用于對第一比對數(shù)據(jù)和第二比對數(shù)據(jù)分別進(jìn)行解析,并將解析結(jié)果以key-value的形式分別存入第一數(shù)據(jù)平臺的第一臨時緩存和第二數(shù)據(jù)平臺的第二臨時緩存中,然后循環(huán)遍歷第一臨時緩存中的key,并到第二臨時緩存中進(jìn)行查詢并比較對應(yīng)的value值,若第二臨時緩存中存在所述key且對應(yīng)的value值相同,則將所述第一臨時緩存和第二臨時緩存中的所述key以及對應(yīng)的value刪除,若否,則在所述第一臨時緩存和第二臨時緩存中保留所述key以及對應(yīng)的value,直到遍歷完成后生成差異數(shù)據(jù),然后驅(qū)動比對結(jié)果生成單元;
比對結(jié)果生成單元,用于將差異數(shù)據(jù)寫入預(yù)設(shè)格式的流水表或者文件中,生成比對結(jié)果。
上述優(yōu)選實(shí)施例可以針對需要進(jìn)行數(shù)據(jù)比對的數(shù)據(jù)量大小采用不同的對比方式,當(dāng)數(shù)據(jù)量較大時采用臨時表的方式進(jìn)行比對,當(dāng)數(shù)據(jù)量較小時,采用臨時緩存的方式進(jìn)行比對,不僅比對速度快,而且節(jié)省了系統(tǒng)資源。
本發(fā)明的數(shù)據(jù)比對方法和系統(tǒng)不僅簡化了數(shù)據(jù)比對的流程步驟,減少了ngboss系統(tǒng)開發(fā)維護(hù)人員的投入,而且可以對數(shù)據(jù)比對類需求進(jìn)行共性化分析和處理,剝離業(yè)務(wù)和比對程序的關(guān)系,將二者進(jìn)行解耦;同時本發(fā)明支持多種數(shù)據(jù)格式(如sql、文本、xml等),支持多種主流數(shù)據(jù)庫(如oracle、mysql等),針對新需求的開發(fā)簡單,只需要按照對應(yīng)格式配置即可,業(yè)務(wù)配置人員后期只需要直接分析差異結(jié)果即可;綜上本發(fā)明對ngboss系統(tǒng)數(shù)據(jù)比對類需求起到了簡化流程、快速開發(fā)、方便維護(hù)的效果,有效的降低開發(fā)運(yùn)維成本,提高維護(hù)人員處理問題的效率。目前該數(shù)據(jù)比對方法和系統(tǒng)已在安徽ngboss系統(tǒng)中的多個需求中得以使用,并積極推廣到其他各省的ngboss系統(tǒng)中。
在本發(fā)明的描述中,需要理解的是,術(shù)語“第一”、“第二”僅用于描述目的,而不能理解為指示或暗示相對重要性或者隱含指明所指示的技術(shù)特征的數(shù)量。由此,限定有“第一”、“第二”的特征可以明示或者隱含地包括至少一個該特征。在本發(fā)明的描述中,“多個”的含義是至少兩個,例如兩個,三個等,除非另有明確具體的限定。
在本說明書的描述中,參考術(shù)語“一個實(shí)施例”、“一些實(shí)施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)包含于本發(fā)明的至少一個實(shí)施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不必須針對的是相同的實(shí)施例或示例。而且,描述的具體特征、結(jié)構(gòu)、材料或者特點(diǎn)可以在任一個或多個實(shí)施例或示例中以合適的方式結(jié)合。此外,在不相互矛盾的情況下,本領(lǐng)域的技術(shù)人員可以將本說明書中描述的不同實(shí)施例或示例以及不同實(shí)施例或示例的特征進(jìn)行結(jié)合和組合。
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。