自己有服务器如何建设微网站,移动端app开发需要哪些技术,软件生成器,开发区高级中学3.5.3、Mycat分片规则
3.5.3.1、范围分片
根据指定的字段及其配置的范围与数据节点的对应情况#xff0c;来决定该数据属于哪一个分片。 示例#xff1a; 可以通过修改autopartition-long.txt自定义分片范围。 注意#xff1a;
范围分片针对于数字类型的字段#xff0c;…3.5.3、Mycat分片规则
3.5.3.1、范围分片
根据指定的字段及其配置的范围与数据节点的对应情况来决定该数据属于哪一个分片。 示例 可以通过修改autopartition-long.txt自定义分片范围。 注意
范围分片针对于数字类型的字段不适用于字符串类型的字段。
3.5.3.2、取模分片
根据指定的字段值与节点数量进行求模运算根据运算结果来决定该数据属于哪一个分片。 示例 注意
取模分片针对于数字类型的字段不适用于字符串类型的字段。
3.5.3.3、一致性hash
所谓一致性hash相同的hash因子计算值总是被划分到相同的分区表中不会因为分区节点的增加而改变原来数据的分区位置。
示例将tb_order表内的数据根据字段id进行一致性hash分片 create table tb_order(id varchar(100) not null primary key,money int null,content varchar(200) null
);INSERT INTO tb_order (id, money, content) VALUES (b92fdaaf-6fc4-11ec-b831-482ae33c4a2d, 10, b92fdaf8-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b93482b6-6fc4-11ec-b831-482ae33c4a2d, 20, b93482d5-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b937e246-6fc4-11ec-b831-482ae33c4a2d, 50, b937e25d-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b93be2dd-6fc4-11ec-b831-482ae33c4a2d, 100, b93be2f9-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b93f2d68-6fc4-11ec-b831-482ae33c4a2d, 130, b93f2d7d-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b9451b98-6fc4-11ec-b831-482ae33c4a2d, 30, b9451bcc-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b9488ec1-6fc4-11ec-b831-482ae33c4a2d, 560, b9488edb-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b94be6e6-6fc4-11ec-b831-482ae33c4a2d, 10, b94be6ff-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b94ee10d-6fc4-11ec-b831-482ae33c4a2d, 123, b94ee12c-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b952492a-6fc4-11ec-b831-482ae33c4a2d, 145, b9524945-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b95553ac-6fc4-11ec-b831-482ae33c4a2d, 543, b95553c8-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b9581cdd-6fc4-11ec-b831-482ae33c4a2d, 17, b9581cfa-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b95afc0f-6fc4-11ec-b831-482ae33c4a2d, 18, b95afc2a-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b95daa99-6fc4-11ec-b831-482ae33c4a2d, 134, b95daab2-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b9667e3c-6fc4-11ec-b831-482ae33c4a2d, 156, b9667e60-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b96ab489-6fc4-11ec-b831-482ae33c4a2d, 175, b96ab4a5-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b96e2942-6fc4-11ec-b831-482ae33c4a2d, 180, b96e295b-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b97092ec-6fc4-11ec-b831-482ae33c4a2d, 123, b9709306-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b973727a-6fc4-11ec-b831-482ae33c4a2d, 230, b9737293-6fc4-11ec-b831-482ae33c4a2d);
INSERT INTO tb_order (id, money, content) VALUES (b978840f-6fc4-11ec-b831-482ae33c4a2d, 560, b978843c-6fc4-11ec-b831-482ae33c4a2d);3.5.3.4、枚举分片
通过在配置文件中配置可能的枚举值指定数据分布到不同数据节点上本规则适用于按照省份、性别、状态拆分数据等业务。 示例将tb_user表内的数据根据字段status进行枚举分片 在rule.xml中可以将namesharding-by-intfile的tableRule复制一份进行重写使其name“sharding-by-intfile-enumstatus”专门用于status字段。 CREATE TABLE tb_user (id bigint(20) NOT NULL COMMENT ID,username varchar(200) DEFAULT NULL COMMENT 姓名,status int(2) DEFAULT 1 COMMENT 1: 未启用, 2: 已启用, 3: 已关闭,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4;insert into tb_user (id,username ,status) values(1,Tom,1);
insert into tb_user (id,username ,status) values(2,Cat,2);
insert into tb_user (id,username ,status) values(3,Rose,3);
insert into tb_user (id,username ,status) values(4,Coco,2);
insert into tb_user (id,username ,status) values(5,Lily,1);
insert into tb_user (id,username ,status) values(6,Tom,1);
insert into tb_user (id,username ,status) values(7,Cat,2);
insert into tb_user (id,username ,status) values(8,Rose,3);
insert into tb_user (id,username ,status) values(9,Coco,2);
insert into tb_user (id,username ,status) values(10,Lily,1);此时插入一个数据其status为4此时会报错 解决方案给予找不到数据节点的数据一个默认节点 function namehash-int classio.mycat.route.function.PartitionByFileMapproperty namedefaultNode2/propertyproperty namemapFilepartition-hash-int.txt/property
/function结果 3.5.3.5、应用指定算法
运行阶段由应用自主决定路由到哪个分片直接根据字符子串必须是数字计算分片号。 示例 CREATE TABLE tb_app (id varchar(10) NOT NULL COMMENT ID,name varchar(200) DEFAULT NULL COMMENT 名称,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4;insert into tb_app (id,name) values(0000001,Testx00001);
insert into tb_app (id,name) values(0100001,Test100001);
insert into tb_app (id,name) values(0100002,Test200001);
insert into tb_app (id,name) values(0200001,Test300001);
insert into tb_app (id,name) values(0200002,TesT400001);3.5.3.6、固定分片hash算法
该算法类似于十进制的求模运算但是为二进制的操作例如取id的二进制低10位与1111111111进行位运算。
位运算同为1则为1有一个0则为0 特点
如果是求模连续的值分别分配到各个不同的分片但是此算法会将连续的值可能分配到相同的分片降低事务处理的难度。可以均匀分配也可以非均匀分配。分片字段必须为数字类型。
示例 注意 分片长度加起来必须等于1024。 CREATE TABLE tb_longhash (id int(11) NOT NULL COMMENT ID,name varchar(200) DEFAULT NULL COMMENT 名称,firstChar char(1) COMMENT 首字母,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4;insert into tb_longhash (id,name,firstChar) values(1,七匹狼,Q);
insert into tb_longhash (id,name,firstChar) values(2,八匹狼,B);
insert into tb_longhash (id,name,firstChar) values(3,九匹狼,J);
insert into tb_longhash (id,name,firstChar) values(4,十匹狼,S);
insert into tb_longhash (id,name,firstChar) values(5,六匹狼,L);
insert into tb_longhash (id,name,firstChar) values(6,五匹狼,W);
insert into tb_longhash (id,name,firstChar) values(7,四匹狼,S);
insert into tb_longhash (id,name,firstChar) values(8,三匹狼,S);
insert into tb_longhash (id,name,firstChar) values(9,两匹狼,L);3.5.3.7、字符串hash解析算法
截取字符串中的指定位置的子字符串进行hash算法算出分片。 示例 create table tb_strhash(name varchar(20) primary key,content varchar(100)
)engineInnoDB DEFAULT CHARSETutf8mb4;INSERT INTO tb_strhash (name,content) VALUES(T1001, UUID());
INSERT INTO tb_strhash (name,content) VALUES(ROSE, UUID());
INSERT INTO tb_strhash (name,content) VALUES(JERRY, UUID());
INSERT INTO tb_strhash (name,content) VALUES(CRISTINA, UUID());
INSERT INTO tb_strhash (name,content) VALUES(TOMCAT, UUID());3.5.3.8、按天日期分片 示例 create table tb_datepart(id bigint not null comment ID primary key,name varchar(100) null comment 姓名,create_time date null
);insert into tb_datepart(id,name ,create_time) values(1,Tom,2022-01-01);
insert into tb_datepart(id,name ,create_time) values(2,Cat,2022-01-10);
insert into tb_datepart(id,name ,create_time) values(3,Rose,2022-01-11);
insert into tb_datepart(id,name ,create_time) values(4,Coco,2022-01-20);
insert into tb_datepart(id,name ,create_time) values(5,Rose2,2022-01-21);
insert into tb_datepart(id,name ,create_time) values(6,Coco2,2022-01-30);
insert into tb_datepart(id,name ,create_time) values(7,Coco3,2022-01-31);3.5.3.9、按自然月分片
使用场景为按照月份来分片每个自然月为一个分片。 示例 create table tb_monthpart(id bigint not null comment ID primary key,name varchar(100) null comment 姓名,create_time date null
);insert into tb_monthpart(id,name ,create_time) values(1,Tom,2022-01-01);
insert into tb_monthpart(id,name ,create_time) values(2,Cat,2022-01-10);
insert into tb_monthpart(id,name ,create_time) values(3,Rose,2022-01-31);
insert into tb_monthpart(id,name ,create_time) values(4,Coco,2022-02-20);
insert into tb_monthpart(id,name ,create_time) values(5,Rose2,2022-02-25);
insert into tb_monthpart(id,name ,create_time) values(6,Coco2,2022-03-10);
insert into tb_monthpart(id,name ,create_time) values(7,Coco3,2022-03-31);
insert into tb_monthpart(id,name ,create_time) values(8,Coco4,2022-04-10);
insert into tb_monthpart(id,name ,create_time) values(9,Coco5,2022-04-30);