MyCat分片规则之固定hash分片

一、简介

  • 实现方式:该算法类似于十进制的求模运算,但是为二进制的操作,例如,取 id 的二进制低 10 位 与 1111111111 进行 & 运算。
  •  
  • 优点:较灵活,可以均匀分配也可以非均匀分配,各节点的分配比例和容量大小由partitionCount 和 partitionLength两个参数决定
  • 缺点:不方便扩展;
  • 注意:partitionCount 和partitionLength的长度必须一致,并且2 * 256 + 1 * 512 = 1024

MyCat分片规则之固定hash分片_第1张图片

二、固定hash分片

实现步骤:

【a】创建数据库和表

create database fixedhash01;
create table user(id bigint not null primary key,name varchar(20));

create database fixedhash02;
create table user(id bigint not null primary key,name varchar(20));

MyCat分片规则之固定hash分片_第2张图片

【b】配置server.xml


        0905
        TESTFIXEDHASH

        
        



        user
        TESTFIXEDHASH
        true

MyCat分片规则之固定hash分片_第3张图片

【c】rule.xml配置分片规则


        
                id
                partition-by-fixed-hash
        



        2,1
        256,512

MyCat分片规则之固定hash分片_第4张图片

【d】schema.xml配置分片节点、分片表等


        




        select user()
        
 
  

MyCat分片规则之固定hash分片_第5张图片

【e】测试插入数据

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());

MyCat分片规则之固定hash分片_第6张图片

【f】分析

2,1
256,512

根据以上配置,分为三个分区: 0-255,256-511,512-1023

故id的低10位二进制 & 1111111111后根据以上范围落入指定的区域。如下分析:

  • 1111111 的二进制低10位为:0001000111,与1111111111相与之后是0001000111,然后再转换为十进制数为71,满足 0-255,在第一个分区,即dataNode1 (fixedhash01数据库);
  •  
  • 2222222 的二进制低10位为:0010001110,与1111111111相与之后是0010001110,然后再转换为十进制数为142,满足 0-255,在第一个分区,即dataNode1 (fixedhash01数据库);
  •  
  • 3333333 的二进制低10位 为:0001010001,与1111111111相与之后是0001010001,然后再转换为十进制数为81,满足 0-255,在第一个分区,即dataNode1 (fixedhash01数据库);
  •  
  • 4444444的二进制低10位为:0100011100,与1111111111相与之后是0100011100,然后再转换为十进制数为284,满足256-511,在第二个分区,即dataNode2(fixedhash02数据库);
  •  
  • 8960000 的二进制低10位为:0000000000,与1111111111相与之后是0000000000,然后再转换为十进制数为0,满足 0-255,在第一个分区,即dataNode1(fixedhash01数据库);

你可能感兴趣的:(MyCat分库分表)