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