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