"另类MySQL"-openHalo 初体验
近日,国内新锐数据库厂商 Halo 开源了自己首个开源项目-openHalo,它基于PG内核实现了兼容MySQL的能力,受到了业内的广泛关注。作为最大的两个开源项目,MySQLPostgreSQL 拥有着庞大的用户群体。而这一开源项目,将两者统一起来,让很多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