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