“另类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通讯协议,这对于用户来说无疑会非常方便。可以使用标准的MySQL 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

阅读剩余
THE END