Mycat(proxy中间件层)
Sharding-jdbc(TDDL为代表的应用层)
分片Join
1.全局表
2.Share Join
mysql> /*!mycat:catlet=io.mycat.catlets.ShareJoin*/select * from employee a, employee_detail b where a.id = b.id;
目前只支持两张分片表的Join。
3.ER表
childTable标签用来声明子表:
joinKey:声明子表的那个字段和主表关联
parentKey:声明主表的关联主键
primaryKey:主表自身的主键
Mycat分页
分页的大坑一定要注意:
mysql> select * from customer order by id limit 1000000,100;
Mycat会分成:
1 -> dn1{SELECT * FROM customer ORDER BY id LIMIT 0, 1000100}
2 -> dn2{SELECT * FROM customer ORDER BY id LIMIT 0, 1000100}
开启使用非堆内存。减少内容消耗
1
Catlet使用
MyCat注解规范
注解SQL使用select语句,不允许使用delete/update/insert等语句;虽然delete/update/insert等语句也能用在注解中,但这些语句在Sql处理中有额外的逻辑判断,从性能考虑,请使用select语句。
注解SQL禁用表关联语句。
注解SQL尽量用最简单的SQL语句,如select id from tab_a where id=’10000’(如果必要,最好能在注解中指定分片)
无论是原始SQL 还是注解SQL,禁止DDL语句
能不用注解的尽量不用
创建存储过程:
/*!mycat:sql=select 1 from customer*/create producer ‘test_proc()’ BEGIN END;
调用存储过程:
/*!mycat:sql=select 1 from customer*/call ‘test_proc()’;
Mycat管理端使用
Zookeeper工具:ZooInspector