mycat数据切分

MyCat是一个用于MySQL读写分离和与数据切分的高可用中间件,本篇文章对数据切分进行演示,帮助小伙伴更好地理解MyCat的数据切分。
使用MyCat,当然要事先安装好MyCat。没有安装的小伙伴可以参考:centos7安装mycat

分片规则:水平分片,垂直分片。
水平分片:是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面。
垂直分片:按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分。

1.配置文件介绍

在安装的文章中,提到了server.xml,在mycat的conf子目录下,可以看到下图,红色框中的三个xml文件需要我们额外关注一下。
conf子目录内容

说明:
rule.xml:分片规则
schema.xml:物理数据库和数据库表的配置
server.xml:账号、参数等配置

2.水平分片示例

水平分片:一个表格的数据分割到多个节点上,按照行分隔。默认情况下,一张数据表中存储的数据不超过500W行,数据过多,会导致性能下降的厉害,我们可以使用mycat的水平分片,将编号为1-500W的数据存放到dn1中,编号为500W01到1000W的数据存放到dn2中,如果有更多数据,使用水平分片的话,添加新的节点即可。

示例使用两台机器,三个节点,三个数据库,简单演示一下
192.168.19.128 dn1
192.168.19.130 dn2,dn3
dn1节点 —>db1数据库—>user表
dn2节点 —>db2数据库—>user表
dn3节点 —>db3数据库—>user表

schema.xml是物理数据库和数据库表的配置所在的文件,我们使用的规则是根据主键范围,500W为一个维度,这个可以在rule.xml中看到。

schema.xml内容修改:
dn1,dn2,dn3,三个节点中都有user表,dn1数据1—500W,dn2数据500W01—1000W,dn3数据1000W01—1500W
schema.xml上部分
schema.xml下部分
节点下创建数据库,建表

#节点1
create database db1;	#建库
create table user(id int(11) primary key auto_increment, name varchar(30), age int(3));	#建表

#节点2
create database db2;	#建库
create table user(id int(11) primary key auto_increment, name varchar(30), age int(3));	#建表

#节点3
create database db3;	#建库
create table user(id int(11) primary key auto_increment, name varchar(30), age int(3));	#建表

mycat中插入数据
mycat中插入数据和在mysql中插入数据略有不同。

mysql -utest -ptest -P8066 -h192.168.19.128 	#登录mycat
use TESTDB;  #使用mycat默认的虚拟库
#插入数据
insert into user(id,name,age) values(1,'kevin',22);
insert into user(id,name,age) values(5000001,'marin',25);
insert into user(id,name,age) values(10000001,'lucy',18);

mycat中的数据:
在这里插入图片描述

192.168.19.128机器中db1数据库中的数据:
在这里插入图片描述

192.168.19.130机器中db2数据库中的数据:
在这里插入图片描述

192.168.19.130机器中db3数据库中的数据:
在这里插入图片描述

总结: 从上面的四张图中,可以看到,mycat正确的完成了水平分片。示例中使用的是按照主键范围,当然也可以按照其他的方式,文章结尾有mycat权威指南链接,需要的小伙伴可以学习了解。

3.垂直分片示例

垂直分片:按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,这种切可以称之为数据的垂直(纵向)切分。

示例使用两台机器,三个节点,三个数据库,简单演示一下
192.168.19.128 dn1
192.168.19.130 dn2,dn3
dn1节点 —>db1数据库—>role表
dn2节点 —>db2数据库—>device表
dn3节点 —>db3数据库—>role表

schema.xml内容修改:
role表存放在dn1,dn3这两个节点下,device表存放在dn2节点下。dn1,dn2,dn3三个节点的配置在水平分片时已经配置过,这里不再重复展示。
垂直分片修改schema.xml
节点下建表
数据库已经在水平分片时创建好了,在此直接使用即可。

#dn1节点中的db1数据库中建表,dn3中db3建表与这个相同
create table role (id int(11) primary key auto_increment, rname varchar(50));

#dn2节点中的db2数据库中建表
create table device(id int(11) primary key auto_increment, dname varchar(50), price double(10,2));

mycat中插入数据

insert into role(id,rname) values(1,'管理员');
insert into device(id,dname,price) values(1,'手电筒',20.5);

dn1节点,db1数据库中role表中的数据:
在这里插入图片描述
dn2节点,db2数据库中device表中的数据:
在这里插入图片描述

dn3节点,db3数据库中role表中的数据:
在这里插入图片描述

总结: 从上面的三张图中,可以看到,mycat正确的完成了垂直分片。往mycat中不同的表中写入数据,最终数据落实与不同的实体数据库,实体表中。

我们不生产知识,我们只是知识的搬运工。
mycat权威指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值