【Mycat 2】详解分库分表设计方案及实操测试(二)

本文详细介绍了Mycat 2的分库分表设计,包括分表不分实例、分实例分表、不分片的情况,并通过实际测试验证了分片规则的有效性。总结了Mycat 2的分片策略,强调了其对现有算法的可定制性,同时指出不应使用Mycat的序列功能。
摘要由CSDN通过智能技术生成

说明
本文将不再使用 Mycat 的序列功能,因为该功能过于鸡肋,实现度低,难用问题多。

5. 分表、不分实例、不分库

不分库只分表,分片键为 id。

5.1 数据分片映射关系

逻辑表名为 not_db_tb

分片 ID 分片键 物理实例(存储节点) 物理库 物理表 描述
0 id rep01Src sharding not_db_tb_0 id 双数
1 id rep01Src sharding not_db_tb_1 id 单数

注释
MOD_HASH() 其实是对 id 散列化后的散列值取模,在本例中即单双。本文仅为简化说明,实则所有 id 单/双数id%10 等均表示此意。

5.2 测试过程

# drop old table, and delete old data record
drop table if exists not_db_tb;

# create table
/*+ mycat:createTable{
	"schemaName":"sharding",
	"shardingTable":{  
		"createTableSQL":"create table not_db_tb(id int primary key,name varchar(10),city varchar(10)) tbpartition by MOD_HASH(id) tbpartitions 2",
		"function":{
				"properties":{
					"dbNum":1,
					"tableNum":2,
					"tableMethod":"mod_hash(id)",
					"mappingFormat":"cls0/sharding/not_db_tb_${tableIndex}",
					"storeNum":2
				}
		}
	},
	"tableName":"not_db_tb"
} */;


# insert data
insert into not_db_tb(id,name,city) values(1,'a','sh'),(2,'b','sh'),(3,'c','bj'),(4,'d','sh'),(5,'e','sz'),(6,'f','bj'),(7,'g','bj'),(8,'h','sz');

# connect to physical mysql database by mysql client directly
table not_db_tb_0;
table not_db_tb_1;

# check data
select t.* from not_db_tb t order by id;

Mycat 逻辑库
在这里插入图片描述

cls0 对应的物理库中的分片表1
在这里插入图片描述

cls0 对应的物理库中的分片表2
在这里插入图片描述

测试结果表明:
单库(即不分库)分表按配置的分片规则分片成功了。

6. 分实例、分表、不分库

本章采用“分实例分表、不分库”的方式分库分表,逻辑方案名、物理方案名均为 sharding

6.1 分库键和分表键相同

注释
因 Mycat 没有分实例的语法,而本例中的库相同,实例和表不同,故此处的“分库键”中的“”指代“实例”。

总共 10 个分片,分片键为 id ,先将 id 散列化后的值按单双分实例,各实例内部不分库(即方案),再在每个库内对 5 取模分表。

6.1.1 数据分片映射关系

逻辑表名为 db_tb_samekey

分片 ID 物理实例(存储节点) 物理表 描述
0 rep01Src db_tb_samekey_0 id%10=0
1 rep01Src db_tb_samekey_1 id%10=1
2 rep01Src db_tb_samekey_2 id%10=2
3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

独上西楼影三人

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

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

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

打赏作者

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

抵扣说明:

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

余额充值