- 由于对堆外内存的使用不当,导致高并发操作时对同一片内存可能发生“double free",从而造成JVM异常,服务崩溃。 #4
- XA事务漏洞:包乱序导致客户端崩溃 #21
- where关键字写错时,会忽视后面的where条件,会得到错误的结果,比如select * from customer wher id=1;#126
- 对于一些隐式分布式事务,例如insert into table values(节点1),(节点2);原生mycat直接下发,这样当某个节点错误时,会造成该SQL执行了一部分
- 权限黑名单针对同一条sql只在第一次生效。#92
- 聚合/排序的支持度非常有限,而且在很多场景下还存在结果不正确、执行异常等问题 #43,#31,#44
- 针对between A and B语法,hash拆分算法计算出来的范围有误#23
- 开启全局表一致性检查时,对全局表的处理存在诸多问题,例如不能alter table、insert...on duplicate...时不更新时间戳、update...in ()报错等#24, #25,#26 ,#5
- 多值插入时,全局序列生成重复值 #1
- ER表在一个事务内被隔离,不能正确插入子表数据#13
- sharding-join结果集不正确#17
详情及其他修正请见 修复列表
-
对某些标准SQL语法支持不够好的方面作了改进,例如对create table if not exists...、alter table add/drop [primary] key...等语法的支持
-
禁止普通用户连接管理端口进行管理操作,增强安全性 #56
-
对全局序列做了如下改进
- 删去无工程意义的本地文件方式
- 改进数据库方式、ZK方式,使获取的序列号更加准确
- 改进时间戳方式和ZK ID生成器方式,消除并发低时的数据分布倾斜问题
- 移除自定义语法 限制:全局序列值不能显式指定
- 原来:insert into table1(id,name) values(next value for MYCATSEQ_GLOBAL,‘test’);
- 现在1:insert into table1(name) values(‘test’);
- 现在2:insert into table1 values(‘test’);
- 注意时间戳方式需要该字段是bigint
-
改进对ER表的支持,智能处理连接隔离,解决同一事务内不可以同时写入父子表的问题,并优化ER表的执行计划
-
系统通过智能判断,对于一些没有显式配置但实际符合ER条件的表视作ER表同样处理
-
在中间件内进行智能解析与判断,使用正确的schema,替换有缺陷的checkSQLschema 参数
-
conf/index_to_charset.properties的内容固化到代码 。
- 提供了更强大的查询解析树,取代ShareJoin,使跨节点的语法支持度更广(join,union,subquery),执行效率更高,同时聚合/排序也有了较大改进
- 提供科学的元数据管理机制,更好的支持show、desc等管理命令,支持不指定columns的insert语句 #7
- 元数据自动检查
- 启动时对元数据进行一致性检查
- 配置定时任务,对元数据进行一致性检查
- 提供更详实的执行计划,更准确的反映SQL语句的执行过程
- 举例: mysql> explain select * from sharding_two_node a inner join sharding_four_node b on a.id =b.id;
+-----------+----------+----------------------------------------------------------------------------------------------------+
| DATA_NODE | TYPE | SQL/REF |
+-----------+----------+----------------------------------------------------------------------------------------------------+
| dn1.0 | BASE SQL | select `a`.`id`,`a`.`c_char`,`a`.`ts`,`a`.`si` from `sharding_two_node` `a` ORDER BY `a`.`id` ASC |
| dn2.0 | BASE SQL | select `a`.`id`,`a`.`c_char`,`a`.`ts`,`a`.`si` from `sharding_two_node` `a` ORDER BY `a`.`id` ASC |
| dn1.1 | BASE SQL | select `b`.`id`,`b`.`c_flag`,`b`.`c_decimal` from `sharding_four_node` `b` ORDER BY `b`.`id` ASC |
| dn2.1 | BASE SQL | select `b`.`id`,`b`.`c_flag`,`b`.`c_decimal` from `sharding_four_node` `b` ORDER BY `b`.`id` ASC |
| dn3.0 | BASE SQL | select `b`.`id`,`b`.`c_flag`,`b`.`c_decimal` from `sharding_four_node` `b` ORDER BY `b`.`id` ASC |
| dn4.0 | BASE SQL | select `b`.`id`,`b`.`c_flag`,`b`.`c_decimal` from `sharding_four_node` `b` ORDER BY `b`.`id` ASC |
| merge.1 | MERGE | dn1.0, dn2.0 |
| merge.2 | MERGE | dn1.1, dn2.1, dn3.0, dn4.0 |
| join.1 | JOIN | merge.1, merge.2 |
+-----------+----------+----------------------------------------------------------------------------------------------------+
9 rows in set (0.00 sec)
- set 系统变量语句的改进
- set charset/names 语句的支持
- 分布式事务:XA实现方式的异常处理的改进
- 大小写敏感支持
- 支持DUAL
- 仅保留枚举、范围、HASH、日期等分片算法,对这几个算法进行了可用性的改进,使之更加贴合实际应用,项目需要时可以按需提供
- 移除异构数据库支持
- 禁止某些不支持的功能,这些功能客户端调用时不会报错,但结果并非用户想要的结果,例如无效的set语句
- 移除目前实现有问题的第一结点库内分表模式
- 移除writeType参数,等效于原来writeType = 1
- 移除handleDistributedTransactions 选项,直接支持分布式事务
一些功能改进的详细描述,见开源数据库中间件DBLE对MyCAT的增强与改进