其他
mycat实践篇-Mycat目前存在的限制
部分SQL还不能很好的支持
除了分片规则相同、ER分片、全局表、以及SharedJoin,其他表之间的Join问题目前还没有很好的解决,需要自己编写Catlet来处理
不支持Insert into 中不包括字段名的SQL
insert into x select from y的SQL,若x与y不是相同的分片规则,则不被支持,此时会涉及到跨分片转移
跨分片的事务,目前只是弱XA模式,还没完全实现XA模式
分片的Table,目前不能执行Lock Table这样的语句,因为这种语句会随机发到某个节点,也不会全部分片锁定,经常导致死锁问题,此类问题常常出现在sqldump导入导出SQL数据的过程中。
目前sql解析器采用Druid,再某些sql例如order,group,sum ,count条件下,如果这类操作会出现兼容问题,比如:
select t.name as name1 from test order by t.name
这条语句select 列的别名与order by 不一致解析器会出现异常,所以在对列加别名时候要注意这类操作异常,特别是由jpa等类似的框架生成的语句会有兼容问题。
开发框架方面,虽然支持Hibernat,但不建议使用Hibernat,而是建议Mybatis以及直接JDBC操作,原因Hibernat无法控制SQL的生成,无法做到对查询SQL的优化,导致大数量下的性能问题。此外,事务方面,建议自己手动控制,查询语句尽量走自动提交事务模式,这样Mycat的读写分离会被用到,提升性能很明显。