AWS現(xiàn)在正式開源Babelfish for PostgreSQL(Babelfish)項目,該項目可以讓PostgreSQL理解專為微軟SQL Server撰寫的應用程序查詢,也就是說,借由使用Babelfish,能夠大幅降低用戶將應用程序,從SQL Server移動到PostgreSQL上的成本。
AWS在2020年的re:Invent大會上,宣布了Babelfish開源的消息,而該公司現(xiàn)在實現(xiàn)這項承諾,以Apache 2.0和PostgreSQL授權許可開源Babelfish,這項授權讓用戶可以自由使用、修改、發(fā)布和銷售自己的產(chǎn)品。
Babelfish是一組擴展組件,提供T-SQL和TDS(Tabular Data Stream)監(jiān)聽端口口,來強化PostgreSQL的能力,能夠支持SQL Server方言(Dialect)T-SQL,以及Savepoint、預存程序、嵌套交易等專屬于SQL Server的功能。
Babelfish能夠簡化將SQL Server應用程序搬遷到PostgreSQL的工作,進而減少用戶在SQL Server上的授權費用。通過Babelfish,即便最初是針對SQL Server構建的應用程序,用戶只要進行少量的程序代碼修改,不需要更換數(shù)據(jù)庫驅動程序,就能夠直接將SQL Server應用程序搬遷到PostgreSQL上。
Babelfish主要針對SQL、T-SQL和TDS三部分擴展支持。雖然SQL屬于ANSI標準,但是依據(jù)關聯(lián)資料實例程度和特定語言擴展,支持程度也有所不同,因此在SQL Server中的查詢,可能無法直接用于PostgreSQL,為了解決這個問題,Babelfish內置解析器來創(chuàng)建適合的查詢節(jié)點,如此SQL Server方言就能夠在PostgreSQL執(zhí)行,Babelfish還針對無法在PostgreSQL運行,或是運行方式不同,特定于SQL Server的資料類型、函數(shù)和運算符提供支持。
SQL Server的語言T-SQL也是Babelfish的支持重點,特別是用于預存程序結構,像是變量、例外和控制流程等。Babelfish還支持T-SQL語義,像是在部分錯誤情況下,PostgreSQL會產(chǎn)生回退處理,但是在SQL Server中卻不會,而通過TDS端口口,Babelfish讓PostgreSQL能夠遵循SQL Server的行為,確保正確性。
Babelfish對于SQL Server的有線協(xié)議TDS也提供良好的支持,該協(xié)議默認在端口口1433上運行,也就是說,Babelfish使用相同的網(wǎng)絡協(xié)議、端口口和連接驅動程序,不過這項支持是利用協(xié)議Hook實例,因此對于TDS的支持,Babelfish并非依靠翻譯層。
由于Babelfish不需要更換驅動程序,因此能大幅減少了更新SQL語言程序代碼的工作,使用Babelfish將應用程序從SQL Server移動到PostgreSQL,與完全移植到PostgreSQL原生驅動程序的工作相比,速度快上不少,而且因為Babelfish為開源項目,因此社區(qū)能夠自由地擴展功能,強化PostgreSQL的擴展性,以便于用在更多使用案例上。