开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 分片 - 垂直拆分 - 测试】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/756/detail/13260
MyCat - 分片 - 垂直拆分 - 测试
内容介绍:
一、测试步骤
二、查询数据
三、插入数据
一、测试步骤
接下来对所配置的垂直分片的配置进行测试,首先重新启动 Mycat,要执行的是bin/mycat rastart,
重新登录 mycat,执行 show databases
指令,可以看到 DATABASE 变成了 ITCAST_DB ,原因是现在的逻辑库库名为 ITCAST_DB
在逻辑库中有多个逻辑表
<schema name=”ITCAST_DB” checkSQLschema=”false” sqlMaxLimit=”100”>
<table name=”tb_areas_city” dataNode=”dn1” primaryKey=”id”/>
<table name=”tb_areas_provinces” dataNode=”dn1” primaryKey=”id”/>
<table name=”tb_areas_region” dataNode=”dn1” primaryKey=”id”/>
<table name=”tb_user” dataNode=”dn1” primaryKey=”id”/>
<table name=”tb_user_address” dataNode=”dn1” primaryKey=”id”/>
<table name=”tb_goods_base” dataNode=”dn2” primaryKey=”id”/>
<table name=”tb_goods_desc” dataNode=”dn2” primaryKey=”goods_id”/>
<table name=”tb_goods_item_cat” dataNode=”dn2” primaryKey=”id”/>
<table name=”tb_order_item” dataNode=”dn3” primaryKey=”id”/>
<table name=”tb_order_master” dataNode=”dn3” primaryKey=”order_id”/>
<table name=”tb_order_pay_log” dataNode=”dn3” primaryKey=”out_trade_no”/>
</schema>
切换数据库,
mysql> use ITCAST_ DB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
然后执行 show databases,里面有关于用户的表、关于商品的表和关于订单的表
虽然这块在操作的时候,各个数据库中存储了很少一部分表,但是最终访问的是mycat,访问 mycat,mycat 当中就配置了这些逻辑表,并设置这些数据表在哪个数据节点当中存储的,这样的话就能看到系统当中所有的表。
二、查询数据
如果想要查询全部的商品信息,商品信息是存储在 158 里面,再来执行select*from tb_user
,查看所有用户信息,用户信息是存储在 157 上面的,输入 select*from tb_order_master
来查看订单信息。以上数据都能正常查询并返回,也代表着刚才配置的 mycat 垂直拆分的配置是正确的。
查询使用的语句为:
Selec*from tb_ goods_ base;
Select*from tb_ user;
Select*from tb_ order_ master ;
三、插入数据
1)插入 user_address 表
insert into
tb_ user_ address(id,user_ id,province. id,city_ id, town_ id,mobile,address,contact , is_ _default,notes,create. _date,alias) values (nu11,'java00001' ,NULL , NULL , NULL, ' 13900112222'. '钟楼',张三','0',NULL ,NULL ,NULL)
插入 user 是插入到 157 界面
2)插入 order 表
insert into tb_ order _item(id, item_ id, goods_ id,order . _id,title,pr ice,num,total fee,pic path,seller_id)
values (nu11,19, 149187842867954,3,'3G 6','1.00",5,'5. 00' ,NULL, 'qiandu')
Order 是插入到 159 上面,代码出现错误
ERROR 1048(HY000) : Column ‘id' cannot be nu11
需要去指定一个 ID
接下来再来查询 tb_ order _item,输入代码 select*from tb_ order _item
这块的操作直接操作 mycat,不要操作 mysql,因为应用程序最后是操作 mycat,把 mycat 当成 mysql 操作。
3)测试跨分片的查询
SELECT order_id ,payment ,receiver, province ,city ,area FROM tb. _order. master。,tb_ _areas_ provinces p,tb_ _areas_ city C,tb_ _areas_ region r
WHERE o.receiver. _province = p. provinceid AND o.receiver. city = c.cityid AND o.receiver. region =r .areaid;
当运行上述的 SQL 语句时,MyCat 会报错, 原因是因为当前 SQL 语句涉及到跨域的 join 操作;这次的查询是多表联合查询。它要查询的是订单的信息,以及这个订单关联的省份、城市和区域的信息。SQL 语句关联的表有四张表,通过三个条件进行消除。执行一下 SQL 语句,在执行的时候发现这块出现了报错
报错内容为这条 SQL 无效路由,并且在多个表发现但是数据节点却没有进行结合。也就是说这里涉及到跨库的操作。虽然这块涉及的操作是 mycat,最终 mycat的还是将 SQL 语句发送到 Mysql 里面,这块设计的表有 order 表,Order 的表在159 这台服务器上,还涉及到 areas,用户的区域相关的表,这张表存放在 157 上面,这就是跨库连接查询。于是这时候 mycat 会报错,原因是因为当前 SQL 语句涉及到跨域的 join 操作。