一、简介

  • 实现方式:根据指定的分片字段以及分片规则,截取分片字段的字符串子串,根据字符串的子串(必须是数字)计算分区号(由调用方传递参数,显示指定分区号),例如,id=0-zhangsan,其中 id 是从 startIndex = 0,size=1,即截取的子串是0(数字) ,0 就是获取的分区,如果大于分区数,则分配到 defaultPartition 分区中。
  • 优点:可以在运行阶段,由应用自主决定路由到那个分片
  • 缺点:需要我们自己在应用里面实现分片规则

二、程序指定分片

【a】 创建数据库和表

create database custon_partition1;
use custon_partition1;
CREATE TABLE `user` (`id` bigint(20) NOT NULL,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDBcreate database custon_partition2;
use custon_partition2;
CREATE TABLE `user` (`id` bigint(20) NOT NULL,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB

【b】配置server.xml

<user name="root"><property name="password">0905</property><property name="schemas">TESTDB</property><!-- 表级 DML 权限设置 --><!--            <privileges check="false"><schema name="TESTDB" dml="0110" ><table name="tb01" dml="0000"></table><table name="tb02" dml="1111"></table></schema></privileges>           -->
</user><user name="user"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property>
</user>

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

<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="1000"><table name="user" dataNode="dn1,dn2" primaryKey="id" rule="sharding-substring-partition" />
</schema><dataNode name="dn1" dataHost="dataHost01" database="custom_partition1" />
<dataNode name="dn2" dataHost="dataHost01" database="custom_partition2" /><dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.179.130:3306" user="root" password="0905" />
</dataHost>

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

<tableRule name="sharding-substring-partition"><rule><columns>name</columns><algorithm>sharding-by-substring-user</algorithm></rule></tableRule><function name="sharding-by-substring-user" class="io.mycat.route.function.PartitionDirectBySubString"><property name="startIndex">0</property><property name="size">1</property><property name="partitionCount">2</property><property name="defaultPartition">0</property></function>

  • 注意点:partitionCount分片数量最好与dataNode分片节点的个数保持一致。如下图MyCat报错日志就是因为我之前设置的partitionCount=8,实际dataNode只有两个。

【e】测试插入数据

insert into user(id,name) values(111,'0-zhangsan');
insert into user(id,name) values(222,'0-lisi');
insert into user(id,name) values(333,'1-wangwu');
insert into user(id,name) values(444,'3-zhaoliu');  //测试默认节点

如上图可见,成功实现了截取name的第一位作为分片节点的序号,也实现了没有满足提交分片节点的情况下默认分片的效果。

MyCat分片规则之程序指定分片相关推荐

  1. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语

    1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...

  2. mysql查逻辑表的分片规则_MySQL(19) Mycat分片(分库分表)配置

    一.前言 本文将基于主从复制,读写分离的环境基础上进行一个简单的分片(分库分表)配置 二.Mycat分片配置 mycat分片主要在scheam.xml,rule.xml这2个表中配置 ① scheam ...

  3. mysql 分区 mycat 分片_Mysql系列六:(Mycat分片路由原理、Mycat常用分片规则及对应源码介绍)...

    一.Mycat分片路由原理 我们先来看下面的一个SQL在Mycat里面是如何执行的: select * from travelrecord where id in(5000001, 10000001) ...

  4. MySql使用MyCat分库分表(四)分片规则

    视频学习地址:17-尚硅谷-垂直分库_哔哩哔哩_bilibili 笔记参考地址:MySQL 分库分表 | xustudyxu's Blog (frxcat.fun) 分片规则 范围分片 介绍 根据指定 ...

  5. mycat 常用分片规则使用详解

    前言 在上一篇,详细了解了使用mycat进行数据库的垂直拆分和表的水平拆分,本篇在此基础上继续探讨mycat的常用分片规则. 什么是分片规则? 分片规则就是按照一定的规则(算法),将数据分散存储到多个 ...

  6. mycat分表之ER表分片、范围分片、取模分片、日期分片、全局表等

    概述 数据库进行水平分表时,需要按照一定规则对数据进行分片. Mycat的分片策略可以分为两种: 连续分片和离散分片. 连续分片常用的有分片规则有: 范围分片. 日期分片. 优点:如果进行范围查询,比 ...

  7. mycat 分片规则

    传统的分片策略都是基于单表,或者分片基于主键进行分配,或者某些场景下需要多个表依赖于一个分片,或者分片的字段并不是主键. a.  对于传统的数据库分片方式都是基于单个表格,对于表关联这种操作,则很难处 ...

  8. Mycat 分片规则---不以规矩,不能成方圆

    分片规则概述 在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数据的切分.数据的聚合.选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理 ...

  9. Mycat分片规则详解

    1.分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下: <tab ...

  10. MyCAT常用分片规则之分片枚举

    MyCAT支持多种分片规则,下面测试的这种是分片枚举.适用场景,列值的个数是固定的,譬如省份,月份等. 在这里,需定义三个值,规则均是在rule.xml中定义. 1. tableRule 2. fun ...

最新文章

  1. java+jtextfield+取值_[求助]JTextfield 取值问题!
  2. ios基础篇(十二)——UINavgationController的使用(三)ToolBar
  3. Java反序列s ysoserial Spring
  4. window电脑H265(HEVC)编码的mp4不显示缩略图解决办法
  5. acm答案java_java-ACM详解(6)——栈 有答案版 全国软件设计大赛 参考试题
  6. c++ vector随机排序
  7. 系列课程 ElasticSearch 之第 6 篇 —— 自定义扩展分词文件、文档映射
  8. 轻快的vim(二):插入
  9. 罗斯福国家森林树木类型识别
  10. java如何画五角星_Java——绘制五角星
  11. ubuntu磁盘io性能测试工具hdparm
  12. c语言return 0和return 1的区别
  13. Linux基本常用命令|ubuntu获取root权限
  14. 移动互联网终端的touch事件,touchstart, touchend, touchmove
  15. python把标签图例放图外的下面 自动放在外侧
  16. AWS S3 挂载到EC2
  17. 仿联想商城laravel实战---4、验证(lavarel的表单验证如何使用)
  18. 大数据数据集下载地址
  19. 【lua 编程 模块详解】——详细lua编程的模块使用
  20. 双十二结束了,程序员如何设计一个秒杀系统?

热门文章

  1. java 向文件写数据_java向文件写数据的3种方式
  2. Docker 核心技术 NameSpace, CGroup, AUFS, DeviceMapper
  3. 高德地图如何取消订单_一文教你如何爬取高德地图
  4. lingo纳什均衡代码_数学建模练习题.
  5. 函数模板与函数的区别
  6. linux 进程 D 状态,Linux 进程的 Uninterruptible sleep(D) 状态
  7. linux常见命令用法之(二)
  8. 微积分中BW定理指的是什么
  9. 大学数学实验习题--统计推断 03(附答案)
  10. 104.二叉树的最大深度 (力扣leetcode) 博主可答疑该问题