DevOps开发运维
成长之路

MyCAT优化关联查询:全局表和E-R分片

Mycat全局表

使用场景:
如果你的业务中有些数据类似于数据字典,比如配置文件的配置,
常用业务的配置或者数据量不大很少变动的表,这些表往往不是特别大,
而且大部分的业务场景都会用到,那么这种表适合于Mycat全局表,无须对数据进行切分,
要在所有的分片上保存一份数据即可,Mycat 在Join操作中,业务表与全局表进行Join聚合会优先选择相同分片内的全局表join,
避免跨库Join,在进行数据插入操作时,mycat将把数据分发到全局表对应的所有分片执行,在进行数据读取时候将会随机获取一个节点读取数据。 例如淘宝用户表
vim schema.xml 
<table name="t_area" primaryKey="id" type="global" dataNode="sh1,sh2" />

后端数据准备
mysql -S /data/3307/mysql.sock 
use taobao
create table t_area (id int not null primary key auto_increment,name varchar(20) not null);

mysql -S /data/3308/mysql.sock 
use taobao
create table t_area (id int not null primary key auto_increment,name varchar(20) not null);
重启mycat 
mycat restart 
测试: 
mysql -uroot -p123456 -h10.0.0.52 -P8066
use TESTDB
insert into t_area(id,name) values(1,'a');
insert into t_area(id,name) values(2,'b');
insert into t_area(id,name) values(3,'c');
insert into t_area(id,name) values(4,'d');

E-R分片

又称为父子分片,为了防止跨分片join,可以使用E-R模式
A join B
on a.xx=b.yy
vim schema.xml 
<table name="A" dataNode="sh1,sh2" rule="mod-long"> 
<childTable name="B" joinKey="yy" parentKey="xx" /> 
</table>
赞(0)

评论 抢沙发

评论前必须登录!

 

LNMP社群 不仅仅是技术

关于我们网站地图