实现步骤:
【a】创建数据库和表
create database hash01;
create table user(id bigint not null primary key,name varchar(20));
create database hash02;
create table user(id bigint not null primary key,name varchar(20));
【b】配置server.xml
0905
TESTHASH
user
TESTHASH
true
【c】配置分片规则rule.xml
0
2
160
/etc/mycat/bucketMapPath
id
murmur
【d】schema.xml配置分片表、分片节点等
select user()
【e】测试插入数据:
重启mycat:
insert into user(id,name) values(1111111,database());
insert into user(id,name) values(2222222,database());
insert into user(id,name) values(3333333,database());
insert into user(id,name) values(4444444,database());
insert into user(id,name) values(8960000,database());
explain select * from user;
explain select * from user where id = 1111111;
可见,如果使用分片字段进行查询,那么sql语句只会发往该条数据对应的分片。
【f】下面我们测试一下指定分片节点的权重
修改rule.xml:
0
2
160
murmurhash-mapfile.txt
/etc/mycat/bucketMapPath
0=2
1=1
配置dn0即第一个节点的权重稍微大一点,然后测试插入数据:
insert into user(id,name) values(6666666,database());
insert into user(id,name) values(7777777,database());
insert into user(id,name) values(8888888,database());
insert into user(id,name) values(9999999,database());
可见,配置的权重越高,数据被分配到该节点的几率就越大。
【g】原理图
节点扩展时: