"另類MySQL"-openHalo 初體驗
原創(chuàng)近日,國內(nèi)新銳數(shù)據(jù)庫廠商 Halo 開源了自己首個開源項目-openHalo,它基于PG內(nèi)核實現(xiàn)了兼容MySQL的能力,受到了業(yè)內(nèi)的廣泛關(guān)注。作為最大的兩個開源項目,MySQL\PostgreSQL 擁有著龐大的用戶群體。而這一開源項目,將兩者統(tǒng)一起來,讓很多MySQL生態(tài)用戶,可以平滑遷移到PG生態(tài)上來。我也抽了點(diǎn)時間做個簡單的評測,下面將從通訊協(xié)議、數(shù)據(jù)類型、數(shù)據(jù)對象、字符集、SQL語法、過程化語言、內(nèi)置函數(shù)、系統(tǒng)視圖及其他等角度進(jìn)行闡述。
https://github.com/HaloTech-Co-Ltd/openHalo
1. 準(zhǔn)備篇:安裝及初試化
在初始安裝部分,基本可參考github上的步驟一路執(zhí)行下來。只是在初始化時一直報權(quán)限不足,后跟Halo同學(xué)請教,修改為如下操作就可以了。
1.png
2. 體驗篇:九個維度大測試
1)通訊協(xié)議
openHalo 原生支持了MySQL通訊協(xié)議,這對于用戶來說無疑會非常方便。可以使用標(biāo)準(zhǔn)的MySQL Client連接openHalo,使用體感與MySQL無異。之前在觀看直播時也談到了,目前針對GUI Tools還有一定欠缺,尚不能完美支持,主要還是在一些數(shù)據(jù)字典的支持上,還沒有做的很完善。
2.png
2)數(shù)據(jù)類型
數(shù)據(jù)類型方面,openHalo支持了絕大部分?jǐn)?shù)據(jù)類型,基本可以滿足日常的需要。
3.PNG
我將支持的字段類型整理為一張表格
4.png
3)字符集
從字符集兼容角度來看,MySQL 支持了多種字符集,如utf8mb4、gbk、latin1等;Halo處理上應(yīng)該是做了簡化處理,只保留了對utf8mb4的支持,其他會做忽略處理。
5.png
4)數(shù)據(jù)對象
openHalo 支持了大部分?jǐn)?shù)據(jù)對象,常見的表、索引、約束、視圖等都沒問題。但對于MySQL一些個性化的能力,如前綴索引、全局索引還不支持。
6.png
? 表
普通表的創(chuàng)建,Halo是沒有問題,但對分區(qū)表目前還不支持。
7.png
openHalo背后是基于PG構(gòu)建的,那么在MySQL模式下創(chuàng)建的表又存到哪里了呢?其實是將MySQL中的dbname對應(yīng)到PG下的schema,如下圖就是在MySQL兼容模式下創(chuàng)建的表,在PG模式下查到的對應(yīng)對象。
8.png
? 索引
9.png
? 約束
主流約束,如主鍵、外鍵、唯一、非空都支持了。
10.png
? 其他:自增
11.png
5)SQL語法
SQL語法是很復(fù)雜的,坦白講很難保證一個數(shù)據(jù)庫去完全兼容另一款數(shù)據(jù)庫的語法。這其中是需要有大量的完善補(bǔ)充的工作。受精力所限,這里沒有測試很多Case,拿了一個稍復(fù)雜些的SQL看了看。
12.png
但值得關(guān)注的是,不僅僅要滿足語法兼容,更重要的是語義兼容性。例如下圖就是針對NULL對排序的影響,可見在MySQL和PG的處理邏輯就不同,而openHalo則細(xì)心的做了適配。
13.png
6)過程化語言
針對過程化語言,之前在直播環(huán)節(jié)談到是支持的,但我在測試時是有問題的,后面有時間再琢磨琢磨。
14.png
7)內(nèi)置函數(shù)
針對大量的內(nèi)置函數(shù),兼容適配的工作量是不少的,可喜的是openHalo做了大量的適配,常見的函數(shù)基本都可以使用。
15.png
16.png
17.png
18.png
19.png
20.png
21.png
22.png
23.png
8)系統(tǒng)視圖
系統(tǒng)視圖的適配難度更大些,畢竟兩個數(shù)據(jù)庫的差異明顯,這里沒有具體探究適配情況,大體統(tǒng)計了一下當(dāng)前的適配的對象。這其中有大量的細(xì)致工作,包括具體每個字段含義是否兼容。
24.png
9)其他方面
針對MySQL常用的一些命令,也做了一些測試。這些對于使用者會非常方便
25.png
26.png
27.png