本發(fā)明涉及數(shù)據(jù)庫改造,尤其是涉及一種用于評估數(shù)據(jù)庫改造效果的全自動比對方法、設(shè)備及介質(zhì)。
背景技術(shù):
1、隨著銀行數(shù)字化轉(zhuǎn)型、信創(chuàng)改造的不斷深入,數(shù)據(jù)庫國產(chǎn)化改造已經(jīng)成為銀行系統(tǒng)開發(fā)的關(guān)鍵步驟之一。在銀行數(shù)字化轉(zhuǎn)型的過程中,數(shù)據(jù)庫作為銀行的核心數(shù)據(jù)存儲和處理系統(tǒng),需要具備高效、安全、可靠的數(shù)據(jù)存儲和管理能力,以滿足銀行不斷變化的業(yè)務(wù)需求和用戶需求。
2、對于數(shù)據(jù)庫的改造主要包括兩個方面,一是將原有系統(tǒng)的數(shù)據(jù)庫改為國產(chǎn)化數(shù)據(jù)庫,二是將程序中的sql語句改造為國產(chǎn)化數(shù)據(jù)庫可執(zhí)行的語句,遵循相關(guān)語法規(guī)范對原有語句進(jìn)行優(yōu)化。改造后的數(shù)據(jù)庫及sql,需要保持與原有系統(tǒng)的內(nèi)容一致性,保證業(yè)務(wù)的正常有序進(jìn)行,并在此基礎(chǔ)上提升系統(tǒng)的有效性,增加業(yè)務(wù)功能的流暢性,使客戶的使用體驗(yàn)更為友好便捷。改造效果的驗(yàn)證,是數(shù)據(jù)庫改造中很重要的一個環(huán)節(jié),能夠檢驗(yàn)開發(fā)人員近期的工作成果,保障改造工作的準(zhǔn)確有序進(jìn)行。
3、如何有效準(zhǔn)確地對改造效果進(jìn)行驗(yàn)證是亟需解決的一個問題。對于改造效果的檢驗(yàn)包含兩方面,一是改造后的sql返回結(jié)果,二是改造后的sql執(zhí)行耗時(shí)?,F(xiàn)有的工具postman依賴于人工編寫sql、發(fā)送請求,耗時(shí)耗力,無法充分滿足項(xiàng)目組對于數(shù)據(jù)庫效果比對的要求。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供了一種自動化程度高、準(zhǔn)確性高的用于評估數(shù)據(jù)庫改造效果的全自動比對方法、設(shè)備及介質(zhì)。
2、本發(fā)明的目的可以通過以下技術(shù)方案來實(shí)現(xiàn):
3、根據(jù)本發(fā)明的第一方面,提供了一種用于評估數(shù)據(jù)庫改造效果的全自動比對方法,用于對第一數(shù)據(jù)庫改造為第二數(shù)據(jù)庫的改造效果進(jìn)行評估,該方法包括:
4、s1、掃描第一數(shù)據(jù)庫和第二數(shù)據(jù)庫對應(yīng)的mapper文件,根據(jù)設(shè)定解析規(guī)則,生成可執(zhí)行的sql語句;
5、s2、從第一數(shù)據(jù)庫和第二數(shù)據(jù)庫掃描獲取表結(jié)構(gòu)和表內(nèi)容,根據(jù)表結(jié)構(gòu)和內(nèi)容對可執(zhí)行的sql語句的對應(yīng)內(nèi)容進(jìn)行替換;
6、s3、將替換內(nèi)容后的可執(zhí)行的sql語句封裝,通過執(zhí)行接口發(fā)送請求并返回執(zhí)行結(jié)果,對執(zhí)行結(jié)果進(jìn)行比對。
7、優(yōu)選地,所述s1中,掃描第一數(shù)據(jù)庫和第二數(shù)據(jù)庫對應(yīng)的mapper文件,根據(jù)設(shè)定解析規(guī)則,生成可執(zhí)行的sql語句,具體包括:
8、通過elementtree庫掃描第一數(shù)據(jù)庫和第二數(shù)據(jù)庫對應(yīng)的mapper文件中的設(shè)定標(biāo)簽對,找到對應(yīng)的mapper語句,去除標(biāo)簽對,將匹配到的“#{字段}”替換為“1”,生成可執(zhí)行的sql語句。
9、優(yōu)選地,所述設(shè)定標(biāo)簽對包括<select></select>、<update></update>、<insert></insert>、以及<delete></delete>。
10、優(yōu)選地,所述s1中還包括,掃描第一數(shù)據(jù)庫和第二數(shù)據(jù)庫對應(yīng)的mapper文件中的特殊標(biāo)簽,根據(jù)設(shè)定解析規(guī)則,生成可執(zhí)行的sql語句,具體為:
11、對于<insert>標(biāo)簽的主鍵屬性“keyproperty”及“usegeneratedkeys”,若滿足“usegeneratedkeys”主鍵屬性值為true,且sql語句中沒有“keyproperty”屬性值作為字段,則將對應(yīng)的字段加上字段前綴添加至可執(zhí)行sql語句中,在相應(yīng)位置加上字段值“1”;
12、對于<if></if>標(biāo)簽對,去掉整個if條件,將對應(yīng)字段及字段值“1”添加至可執(zhí)行sql語句中;
13、對于<where></where>標(biāo)簽對,將“where”添加至<where>原有位置,然后去掉原有標(biāo)簽對;
14、update語句中更新多個字段時(shí),若set部分末尾以逗號結(jié)束,則去掉該逗號;
15、對于<set></set>標(biāo)簽對,替換為set;
16、對于<!--注釋內(nèi)容-->標(biāo)簽,刪除處理。
17、優(yōu)選地,所述s2中,根據(jù)表結(jié)構(gòu)和內(nèi)容對可執(zhí)行的sql語句的對應(yīng)內(nèi)容進(jìn)行替換,具體為:
18、對第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的表結(jié)構(gòu)進(jìn)行比對,對數(shù)據(jù)庫各個表中字段名和字段屬性進(jìn)行一致性核查,并記錄不一致信息于結(jié)果記錄中;
19、掃描可執(zhí)行的sql語句,在結(jié)果記錄中查詢可執(zhí)行的sql語句涉及到的表名,將字段進(jìn)行對比匹配,將可執(zhí)行的sql語句中“1”替換成結(jié)果記錄中字段內(nèi)容,去除可執(zhí)行的sql語句中結(jié)果記錄未有的字段。
20、優(yōu)選地,所述對第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的表結(jié)構(gòu)進(jìn)行比對,對數(shù)據(jù)庫各個表中字段名和字段屬性進(jìn)行一致性核查,并記錄不一致信息于結(jié)果記錄中,具體為:
21、1)連接第一數(shù)據(jù)庫和第二數(shù)據(jù)庫,獲取所有表名,循環(huán)掃描第二數(shù)據(jù)庫中表名;
22、2)判斷第二數(shù)據(jù)庫中表名是否與第一數(shù)據(jù)庫中表名匹配,如匹配則轉(zhuǎn)3),否則認(rèn)定“表名不一致或不存在”并記錄于結(jié)果記錄中;
23、3)獲取第一數(shù)據(jù)庫和第二數(shù)據(jù)庫中表的字段信息,循環(huán)掃描第二數(shù)據(jù)庫中表中的字段;
24、4)判斷第二數(shù)據(jù)庫中表中字段是否與第一數(shù)據(jù)庫中表中字段匹配,如匹配則轉(zhuǎn)5),否則認(rèn)定“字段名不一致或不存在”并記錄于結(jié)果記錄中;
25、5)獲取字段屬性;
26、6)判斷第二數(shù)據(jù)庫中表中字段屬性是否與第一數(shù)據(jù)庫中表中字段屬性匹配,如匹配轉(zhuǎn)3)循環(huán),否則認(rèn)定“字段屬性不一致”并記錄于結(jié)果記錄中。
27、優(yōu)選地,所述s3中,將替換內(nèi)容后的可執(zhí)行的sql語句封裝,通過requests庫模擬真實(shí)環(huán)境向執(zhí)行接口發(fā)送sql請求,并返回執(zhí)行耗時(shí)和執(zhí)行結(jié)果;
28、其中,所述sql請求對應(yīng)的接口參數(shù)包括執(zhí)行數(shù)據(jù)庫類型、執(zhí)行操作及可執(zhí)行的sql語句,對應(yīng)的返回結(jié)果包括sql的執(zhí)行時(shí)間及執(zhí)行結(jié)果。
29、優(yōu)選地,所述將替換內(nèi)容后的可執(zhí)行的sql語句封裝,包括:
30、對于insert語句,首先生成delete報(bào)文,每次發(fā)送insert請求報(bào)文前,先發(fā)送一次delete請求報(bào)文;
31、對于包含insert的sql語句,根據(jù)表名、第一個字段及字段值,生成一個delete類型的sql語句,拼裝成對應(yīng)的delete報(bào)文。
32、根據(jù)本發(fā)明的第二方面,提供了一種電子設(shè)備,包括存儲器和處理器,所述存儲器上存儲有計(jì)算機(jī)程序,所述處理器執(zhí)行所述程序時(shí)實(shí)現(xiàn)任一項(xiàng)所述的方法。
33、根據(jù)本發(fā)明的第三方面,提供了一種計(jì)算機(jī)可讀存儲介質(zhì),其上存儲有計(jì)算機(jī)程序,所述程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)任一項(xiàng)所述的方法。
34、與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
35、1)本發(fā)明整個生成sql及報(bào)文比對的過程實(shí)現(xiàn)全自動化,實(shí)現(xiàn)了數(shù)據(jù)庫改造前后對比,減少了大量人力成本,增加了比對過程的高效性、準(zhǔn)確性;開發(fā)人員可以很直觀便捷地判斷出數(shù)據(jù)庫改造前后的效果一致性,同時(shí)很方便地發(fā)現(xiàn)數(shù)據(jù)庫改造過程中的問題,降低數(shù)據(jù)庫改造中可能存在的風(fēng)險(xiǎn),保障改造效果的準(zhǔn)確性。
36、2)本發(fā)明通過elementtree庫掃描數(shù)據(jù)庫對應(yīng)的mapper文件,可以更加快速、準(zhǔn)確解析出標(biāo)簽對信息。
37、3)本發(fā)明通過對<insert>標(biāo)簽的主鍵屬性“keyproperty”及“usegeneratedkeys”進(jìn)行解析處理,在“usegeneratedkeys”為true且sql語句中沒有“keyproperty”屬性值作為字段時(shí),將對應(yīng)字段加上字段前綴添加至可執(zhí)行sql語句中,解決<insert>標(biāo)簽自帶主鍵,導(dǎo)致sql字段缺失的問題。
38、4)對第一數(shù)據(jù)庫和第二數(shù)據(jù)庫的表結(jié)構(gòu)進(jìn)行比對,對數(shù)據(jù)庫各個表中字段名和字段屬性進(jìn)行一致性核查,并記錄不一致信息于結(jié)果記錄中,可用于后續(xù)sql語句內(nèi)容替換的準(zhǔn)確性。