mycat垂直分库:
userinfo库包括,表user、表company
userorder库包括:表order
涉及多表查询:
配置如下:schema.xml配置如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="order" dataNode="dn1"/>
<table name="user" dataNode="dn2"/>
<table name="compnay" dataNode="dn2"/>
<!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
/> -->
</schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="root"
password="root">
</writeHost>
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
</mycat:schema>
跨库三个表以上查询会报错:
/*!mycat:catlet=io.mycat.catlets.ShareJoin */
select user.username, company.companyname,order.ordername
from user inner join company on user.companyid = company.companyid
inner join order on order.userid = user.userid
报错提示:
跨库多表查询:
抛异常invalid route in sql, multi tables found but datanode has no intersection
最近一些查询资料发现,mycat1.6.5支持两个表的跨库查询: http://www.iocoder.cn/MyCAT/two-table-share-join/
如下跨库sql能查出正确的结果。【注: 跨库查询注意注解的使用】/*!mycat:catlet=io.mycat.catlets.ShareJoin */
/*!mycat:catlet=io.mycat.catlets.ShareJoin */
select user.username,=order.ordername
from user
inner join order on order.userid = user.userid
主题继续探索: 1) 可以修改 mycat源码进行拓展, https://github.com/MyCATApache/Mycat-Server
2)自己修改自己的业务逻辑代码实现,如上最有两个表的跨库查询。