遷移到MySQL的語法轉(zhuǎn)換工具初步設(shè)計(jì)
遷移到MySQL有很多原因,在基礎(chǔ)準(zhǔn)備工作中,源庫的建表語句到MySQL建表語句的轉(zhuǎn)換,不僅涉及到數(shù)據(jù)庫間的語法,數(shù)據(jù)類型等差異,同時(shí)在SQL開發(fā)規(guī)范方向也有一些相應(yīng)的規(guī)范,如何提高開發(fā)效率,同時(shí)使得開發(fā)規(guī)范更容易落地,向MySQL遷移的語法轉(zhuǎn)換工具的作用就尤為重要。
以下僅以SQL Server作為參考,對于Oracle等其他商業(yè)數(shù)據(jù)庫也可以采用類似的處理方式。
經(jīng)過調(diào)研分析和使用經(jīng)驗(yàn),計(jì)劃支持兩種使用模式。
模式1:指定數(shù)據(jù)庫表
其中數(shù)據(jù)庫的庫,表,字段等元數(shù)據(jù)信息存儲在運(yùn)維系統(tǒng)元數(shù)據(jù)中,需要周期性和線上環(huán)境做字典信息同步,在接受到前端請求之后,提供一鍵轉(zhuǎn)換接口,在這個處理過程中實(shí)現(xiàn)如下兩個步驟:
1)構(gòu)建出SQL Server側(cè)的建表語句,該建表語句可以供前端顯示和轉(zhuǎn)換為MySQL語法作為參考。
2)將語句轉(zhuǎn)換為符合MySQL基本規(guī)范的SQL語句,主要涉及數(shù)據(jù)類型,默認(rèn)值,存儲引擎,自增列值,字符集等。
在語法轉(zhuǎn)換完成后,可以使用已有的SQL審核服務(wù)進(jìn)一步審核修正,直至滿足自動化上線的標(biāo)(比如SQL打分為80分以上即可實(shí)現(xiàn)自動化上線)
模式2:輸入SQL文本
輸入SQL文本目前存在兩類通用問題:
1)目前業(yè)務(wù)方使用的客戶端工具存在差異,create table語句轉(zhuǎn)換會生成兩種風(fēng)格的建表語句,第一類是create table xxxx,只有一條語句,第二類是:create table xxxxx,alter table xxxx add xxx;會有多條SQL語句
2)輸入文本轉(zhuǎn)換為MySQL文本的過程中,因?yàn)榍岸溯斎胄畔⒌牟町愒诮馕鰧?shí)現(xiàn)中復(fù)雜度較高。
在執(zhí)行SQL文本時(shí),會將SQL執(zhí)行在虛擬數(shù)據(jù)庫上面,執(zhí)行完成后會同步推送SQL Servre側(cè)的字典數(shù)據(jù)到運(yùn)維系統(tǒng)的臨時(shí)元數(shù)據(jù)存儲中,然后在這個基礎(chǔ)上,提供一鍵轉(zhuǎn)換接口,在這個處理過程中實(shí)現(xiàn)如下兩個步驟:
3)構(gòu)建出SQL Server側(cè)的建表語句,該建表語句可以供前端顯示和轉(zhuǎn)換為MySQL語法作為參考,此時(shí)建表語句會整合為獨(dú)立的1條SQL.
4)將語句轉(zhuǎn)換為符合MySQL基本規(guī)范的SQL語句,主要涉及數(shù)據(jù)類型,默認(rèn)值,存儲引擎,自增列值,字符集等。
在語法轉(zhuǎn)換完成后,可以使用已有的SQL審核服務(wù)進(jìn)一步審核修正,但是沒有對接SQL自動化上線流程。
整個一套體系下來,需要設(shè)計(jì)哪幾個接口,哪些是對內(nèi)對外的服務(wù)就一目了然了。
本文轉(zhuǎn)載自微信公眾號「楊建榮的學(xué)習(xí)筆記」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系楊建榮的學(xué)習(xí)筆記公眾號。