Mycat测试之坑

之前线上系统并发量小,用单数据库实例节点就可以解决问题,最近压力有所上升,单节点经常遇到锁表的问题,数据库做过几次相关的优化还是老样子,就把数据库中间件的使用提上了日程。于是就开始了测试mycat的性能,做了几轮之后,性能还可以。但是忽略了一个重要的问题,测试都在单个schema下进行,今天偶然用到了跨库查询,结果就挂了。

问题还原

mycat配置多个schema,只能在单个schema下进行查询,即便按照标准sql写出跨库查询sql,还是不会识别schema,只能在当前schenma下查询,即mysql的1064错误。

1
2
3
4
5
6
7
8
9
10
11
<schema name="testdb1">
<table name="t1" datanode="dn1" />
</schema>
<schema name="testdb2">
<table name="t2" datanode="dn2" />
</schema>

select * from testdb1.t1 join testdb2.t2;

Error 1064 talbe not defined in testdb2.

官网方案

两个表都是不分片的表,但是位于不同的物理数据库上。也无法将某一批次的表做成全局表。即便做成全局表,也无法join成功。

支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。

官网给出的解释是支持跨库2表join,在应用已基本完成的情况下,不想再重新整理sql了。

替换方案是换成了apache的shardingsphere试试,看着介绍还不错