MyCat (三) --------- MyCat 分库分表


一、水平切分

A、配置 server.xml

指定主键生成策略

B、配置 schema.xml

指定逻辑库,分片结点,结点主机等

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100">
	    <!-- 要实现分库分表,那么就需要在<schema>标签下配置表了,现在是水平切分,表示要对哪张表进行切分 -->
	    <table name="orders" primaryKey="id" autoIncrement="true"                                   dataNode="dn1,dn2,dn3" rule="mod-long" />
	</schema>
	
	<!--配置真实的数据库名称 test -->
	<dataNode name="dn1" dataHost="localhost1" database="test01" />
	<dataNode name="dn2" dataHost="localhost1" database="test02" />
	<dataNode name="dn3" dataHost="localhost1" database="test03" />
	
	<dataHost name="localhost1"
	          maxCon="1000"
	          minCon="10"
	          balance="1"
	          writeType="0"
	          dbType="mysql"
	          dbDriver="native"
	          switchType="1"
	          slaveThreshold="100">
	    <heartbeat>select user()</heartbeat>
	    <writeHost host="hostM3307" url="localhost:3307" user="root" password="aszhuo123">
	        <readHost host="hostS3308" url="localhost:3308" user="root" password="aszhuo123" />
	        <readHost host="hostS3309" url="localhost:3309" user="root" password="aszhuo123" />
	    </writeHost>
	    <writeHost host="hostM3308" url="localhost:3308" user="root" password="aszhuo123">
	        <readHost host="hostS3307" url="localhost:3307" user="root" password="aszhuo123" />
	        <readHost host="hostS3310" url="localhost:3310" user="root" password="aszhuo123" />
	    </writeHost>
	</dataHost>
</mycat:schema>

C、配置 rule.xml

指定分片结点数

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    <!-- how many data nodes -->
    <property name="count">3</property>
</function>

D、水平切分测试

(1) 通过 Navicat 在 3307 上创建三个库 test01、test02 和 test03,并在每个库中创建 orders 表

在这里插入图片描述

不管是何种方式的切分,主键生成必须交给 MyCat 实现

(2) 插入数据验证

next value for MYCATSEQ_GLOBAL:MyCat 主键生成的方式

insert into orders (id,money) values (next value for MYCATSEQ_GLOBAL,90.1);
insert into orders (id,money) values (next value for MYCATSEQ_GLOBAL,90.2);
insert into orders (id,money) values (next value for MYCATSEQ_GLOBAL,90.3);
insert into orders (id,money) values (next value for MYCATSEQ_GLOBAL,90.4);

在这里插入图片描述

分别插入到不同的数据库的 orders 表中。

(3) 查询测试

查询操作,会将所有库中的 orders 数据查询出来

在这里插入图片描述

二、垂直切分

A、配置 server.xml

指定主键生成策略

<!--配置数据库的主键怎么生成,0为本地文件方式,1为数据库方式,2为时间戳序列方式-->
<property name="sequnceHandlerType">0</property>

B、配置 schema.xml

也同样需要配置 table 标签,水平切分是要对哪张表进行切分就配置那张表,垂直切分需要将数据库中的所有表都配置上,指定不同的 datanode。

需求:整个P2P平台的数据库(p2p)进行垂直切分,分为前台数据库(p2p-web)、后台数据库(p2p-admin)

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100">
	    <!-- 要实现分库分表,那么就需要在<schema>标签下配置表了,现在是垂直切分 -->
	
	    <!--需求:整个P2P平台的数据库(p2p)进行垂直切分,分为前台数据库(p2p-web)、后台数据库(p2p-admin)-->
	
	    <!--P2P前台数据库-->
	    <table name="orders" primaryKey="id" autoIncrement="true" dataNode="dn1"/>
	    <table name="users" primaryKey="id" autoIncrement="true" dataNode="dn1"/>
	
	    <!--P2P后台数据库-->
	    <table name="products" primaryKey="id" autoIncrement="true" dataNode="dn2"/>
	    <table name="creditor" primaryKey="id" autoIncrement="true" dataNode="dn2"/>
	</schema>
	
	<!--配置真实的数据库名称 testdb01 -->
	<dataNode name="dn1" dataHost="localhost1" database="p2p-web" />
	<dataNode name="dn2" dataHost="localhost1" database="p2p-admin" />
	
	<dataHost name="localhost1"
	          maxCon="1000"
	          minCon="10"
	          balance="1"
	          writeType="0"
	          dbType="mysql"
	          dbDriver="native"
	          switchType="1"
	          slaveThreshold="100">
	    <heartbeat>select user()</heartbeat>
	    <writeHost host="hostM3307" url="localhost:3307" user="root" password="aszhuo123">
	        <readHost host="hostS3308" url="localhost:3308" user="root" password="aszhuo123" />
	        <readHost host="hostS3309" url="localhost:3309" user="root" password="aszhuo123" />
	    </writeHost>
	    <writeHost host="hostM3308" url="localhost:3308" user="root" password="aszhuo123">
	        <readHost host="hostS3307" url="localhost:3307" user="root" password="aszhuo123" />
	        <readHost host="hostS3310" url="localhost:3310" user="root" password="aszhuo123" />
	    </writeHost>
	</dataHost>

</mycat:schema>

C、垂直切分测试

(1) 在 3307 上创建两个个数据库 p2p-web、p2p-admin

在这里插入图片描述

(2) 在 p2p-web 库中创建 users 和 orders 表

(3) 在 p2p-admin 库中创建 products 和 news 表

(4) 插入、查询测试

next value for MYCATSEQ_GLOBAL

D、注意

垂直切分带来的价值:

可以屏蔽掉多数据源的问题,只需要一个统一入口 MyCat 就可以操作下面的多个数据库。不管是何种方式的切分,主键生成必须交给 MyCat 实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值