Mycat水平分片策略(水平分表拆分)

一、分片枚举算法

可以实现按照地区进行分表

根据不同的枚举(常量)进行分表存储

1.mysql中建立3个数据库分别为user_db1 user_db2 user_db3

2.在3个数据库中建立3个一样的数据表 order_info  order_info表中有字段name

3.配置mycat环境

schema.xml




    
    
		
	
	
    
    
        select user()
        
        
            
            
        
    

 
  

指定表名为order_info 指定数据库集群 指定分片规则 为role2

rule.xml





 
    
             
                  name
                hash-int
                
    
	
	
		partition-hash-int.txt
		1
		1
	
	

name    指定表中字段 该字段决定存入哪个库
hash-int   规则方法

class="io.mycat.route.function.PartitionByFileMap" 采用分片枚举算法

partition-hash-int.txt  指定枚举文件

wuhan=0
shanghai=1
suzhou=2

1 表示枚举不为数值

1 如果不在枚举中则默认存入节点1

4.启动mycat

练级mycat数据库 添加以下3条数据

Mycat水平分片策略(水平分表拆分)_第1张图片

Mycat水平分片策略(水平分表拆分)_第2张图片

Mycat水平分片策略(水平分表拆分)_第3张图片

同时mycat虚拟数据库中查询 可以将数据全部查询出来 包括分页 模糊查询等都支持

Mycat水平分片策略(水平分表拆分)_第4张图片

Mycat水平分片策略(水平分表拆分)_第5张图片

二、分片求模算法

根据id字段取模集群台数 得出的结果分别分配给不同节点。节点从0开始

比如1%3=1 分配到节点1  也就是user_db2

3%3 =0 分配到节点0  也就是user_db1

修改rule.xml文件 添加role1取模规则





 
    
		
			name
			hash-int
		
    
	
	
        
            id
            mod-long
        
    
	
	
		partition-hash-int.txt
		1
		1
	
 
    
        
        3
	
	

这里需要注意的是 tableRule 需要放一起 function也需要放一起 不然启动时候会出现报错

schema.xml文件




    
    
	
select user()

添加 

 

启动mycat  添加测试数据

Mycat水平分片策略(水平分表拆分)_第6张图片

Mycat水平分片策略(水平分表拆分)_第7张图片

你可能感兴趣的:(数据库mysql,oracle,mycat,读写分离)