mycat垂直分库、垂直分片:mycat的多表跨库的一次实战

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)自己修改自己的业务逻辑代码实现,如上最有两个表的跨库查询。

猜你喜欢

转载自blog.csdn.net/kingmax54212008/article/details/83592971