MyCat分片规则之ASCII码取模范围分片

article/2025/9/14 6:44:51

一、简介

上一篇文章介绍了如何在MyCat中实现取模范围分片,其实还有一个分片方式与它很相似,那就是本节讲解的ASCII码取模范围分片。

  • 实现方式:与取模范围算法类似,支持数值、符号、字母取模。根据配置的分片字段,截取长度为 prefixLength 的子串,在对子串中每一个字符的 ASCII 码求和,然后对 各个字符的ASCII 码求和值进行取模运算(sum % patternValue),再跟分片范围进行匹配,就可以计算出子串的分片节点。
  •  
  • 优点:可以自由决定每个数据所在分片。
  • 缺点:需要我们提前规划好dataNode,扩展比较麻烦。

二、ASCII取模范围分片

实现步骤:

【a】创建数据库和表

use ascii01;
create table user(id bigint not null primary key,name varchar(20));use ascii02;
create table user(id bigint not null primary key,name varchar(20));

【b】配置server.xml: 逻辑库信息、用户信息

<user name="root"><property name="password">0905</property><property name="schemas">TESTASCII</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">TESTASCII</property><property name="readOnly">true</property>
</user> 

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

<tableRule name="partition-by-ascii"><rule><columns>id</columns><algorithm>sharding-by-pattern-ascii</algorithm></rule>
</tableRule><function name="sharding-by-pattern-ascii" class="io.mycat.route.function.PartitionByPrefixPattern"><property name="mapFile">partition-pattern-ascii.txt</property><property name="patternValue">256</property><property name="prefixLength">5</property>
</function>

【d】配置partition-pattern-ascii.txt取模分片规则

  • vim partition-pattern-ascii.txt
1-32=1
33-64=2
65-128=3
129-256=4
0-0=0

  • 注意:在mapFile配置的文件中,其1-32 表示的为截取 id之后的子串每一个字符的ASCII码和 % 256后分布的范围。

【e】配置schema.xml,指定分片表,分片规则,分片节点等

<schema name="TESTASCII" checkSQLschema="true" sqlMaxLimit="1000"><table name="user" dataNode="dn$1-5" primaryKey="id" rule="partition-by-ascii" />
</schema><dataNode name="dn1" dataHost="dataHost01" database="ascii01" />
<dataNode name="dn2" dataHost="dataHost01" database="ascii02" />
<dataNode name="dn3" dataHost="dataHost01" database="ascii01" />
<dataNode name="dn4" dataHost="dataHost01" database="ascii02" />
<dataNode name="dn5" dataHost="dataHost01" database="ascii01" /><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>

【f】测试插入数据

重启mycat:

  • cd /bin
  • ./mycat restart
  • mysql -uroot -p0905 -h192.168.179.130 -P8066
insert into user(id,name) values(1111111,'zhangsan');
insert into user(id,name) values(2222222,'lisi');
insert into user(id,name) values(3333333,'wangwu');
insert into user(id,name) values(4444444,'zhaoliu');
insert into user(id,name) values(8960000,'tianqi');

分析:

  • 1111111截取前五位 是 11111, 11111每个字符的ascii码之和为:49 * 5 = 245
  • 245 % 256 = 245 : 满足129-256=4,datanode index = 4,即在第五个节点dn5, 所以该条数据插入到ascii01库。
  •  
  • 2222222截取前五位 是 22222:22222每个字符的ascii码之和为:50 * 5 = 250
  • 250 % 256 = 250:满足129-256=4,datanode index = 4,即在第五个节点dn5 所以该条数据插入到ascii01库。
  •  
  • 3333333截取前五位 是 33333:3333每个字符的ascii码之和为:51 * 5 = 255
  • 255 % 256 = 255:满足129-256=4,datanode index = 4,即在第五个节点dn5 所以该条数据插入到ascii01库。
  •  
  • 44444截取前五位 是 44444:44444每个字符的ascii码之和为:52 * 5 = 260
  • 260 % 256 = 4:满足1-32=1,datanode index = 1,即在第二个节点dn2 所以该条数据插入到ascii02库。
  •  
  • 8960000截取前五位 是 89600:89600每个字符的ascii码之和为:56 + 57 + 54 + 48 + 48 = 263
  • 263 % 256 = 7:满足1-32=1,datanode index =1,即在第二个节点dn2 所以该条数据插入到ascii02库。

http://chatgpt.dhexx.cn/article/CjN3LHrA.shtml

相关文章

pandorabox php7,新路由3newifi D2专用潘多拉PandoraBox固件SFE快速转发超强信号不掉速eeprom...

今天就分享一个这次给新路由3(newifi3) PandoraBox 潘多拉固件下载刷的第三方固件潘多拉PandoraBox固件 PandoraBox是什么?PandoraBox 是基于LEDE/OpenWrt框架高度定制的中文本地化固件,应用层与OpenWrt高度兼容,但内核相关部分与OpenWrt/LEDE不同。 以前按照这个方案改了eep…

亲测可用小米刷旧版开发版固件,刷入华硕、潘多拉固件

准备 小米路由器青春版 *1、网线 *1、电脑 *1 准备文件&#xff1a;小米路由器青春版刷机.zip 最主要的还是小米路由器青春版的老版开发版固件 刷入开发版ROM 解压提供的压缩包 登录你的小米路由器&#xff08;192.168.31.1&#xff09; 然后选择升级系统、手动升级选择“…

已刷高格固件的路由器如何更换为潘多拉固件

此方法适用于从任意固件改刷其他插件 方法步骤&#xff1a; 第一步 进入breed模式 拨电-按住reset键-插电-&#xff08;看到电源灯连闪松开reset键一般通电3~5秒即可&#xff09; 第二步 电脑插网线到LAN口-打开浏览器-清理缓存-输入网址&#xff1a;192.168.1.1&#xff0…

小米mini路由器刷breed不死鸟和潘多拉固件

前言 开启小米路由器ssh, 这一步浪费我很长时间&#xff0c;因为目前的开发版都对ssh升级进行了md5校验&#xff0c;导致官方升级方法总是失败&#xff0c;所以换成老版本的 路由器固件就行了。 步骤 下载 0.4.36 mini路由器开发版固件 地址, 然后直接在路由器后台管理的web…

极路由HC5661a刷潘多拉固件后配置python环境运行脚本登陆dr.com校园网

极路由hc5661a刷openwrt并配置python&#xff0c;本文是网上搜索的方法经过本人亲测可用于hc5651的方法&#xff0c;非原创 提前先说&#xff0c;如果之前没有刷路由器刷openwrt经验的&#xff0c;看教程自己进行配置仍然会遇到许多问题耗费许多时间&#xff08;比如我&#x…

潘多拉 搭建 php服务器,OpenWrt/LEDE/潘多拉固件4G网卡上网之【HiLink模式上网教程】...

OpenWrt/LEDE/潘多拉固件4G网卡上网之【HiLink模式上网教程】 时间&#xff1a;2019-07-21 16:38:33 / 来源&#xff1a;你好多多DIY / 作者&#xff1a;多多 本教程以多多本店的OPENWRT 4G网卡路由器和华为4G网卡为例&#xff0c;其他固件和网卡可能会有少许不同&#xff0c;非…

优酷路由宝刷潘多拉固件最详细教程+最新版+赚钱插件

我的优酷路由器是最新版的固件,所以刷机钱要回滚版本。 1,首先把浏览器(360浏览器调成兼容模式) 2、先刷固件 luyoubao_818_downgrade.bin 链接:http://pan.baidu.com/s/1kVoDF2f 密码:6524 登陆后台 http://192.128.11.1 在 更多设置—系统升级—手动升级—上传固件。然后…

小米路由3刷华硕潘多拉固件教程及软件相关

前言 当初为了方便前后入手了两个小米路由3&#xff0c;刚开始没有注意&#xff0c;以为是网络问题&#xff0c;后来升级了50M宽带&#xff0c;时间一长毛病越来越明显&#xff0c;首先是5G的问题&#xff0c;经常搜索不到&#xff0c;然后就把2.4G与5G合并了&#xff0c;然后…

潘多拉路由器php,Padavan潘多拉固件ap模式openwrt固件应该如何设置有线AP模式

如上图&#xff0c;家里有一个闲置的路由器刷的是潘多拉固件&#xff0c;最近就想把这个闲置的路由器利用起来&#xff0c;接到软路由下面做一个纯AP使用。但是到设置的时候就犯难了。 上图那么多选项不知道选那个&#xff0c;还有都有什么区别。 潘多拉固件&#xff0c;做纯AP…

小米路由器mini 刷潘多拉固件教程

自己的小米路由器mini想安装各种各样的插件&#xff0c;实现远程下载&#xff0c;免广告&#xff0c;SS&#xff0c;多拨各种各样的功能。但是自带的路由器固件不支持这些功能&#xff0c;只能自己动手刷个其他固件。具体刷机教程如下&#xff0c;楼主已经成功刷入固件&#xf…

小米路由器3潘多拉固件刷机教程

小米路由器的官方固件优化不够好&#xff0c;很多人都出现限速、断流的现象。我之前也出现过限速的情况&#xff0c;最后没办法只能设置路由器定时重启。前几天突发奇想把定时重启关了&#xff0c;发现路由器居然连着好几天都没啥问题&#xff0c;我以为从此以后就能安心用了&a…

pandora固件运行c语言,潘多拉固件设置单线多播教程

由于小编手懒&#xff0c;就直接在网上找了教程&#xff0c;在这里转载过来。 1、进入路由管理界面后点击左侧的“接口”&#xff0c;选择“WAN”。 2、点击“协议”选项栏里的“DHCP客户端”改为“PPPoE”,点击“切换协议”。 3、在“PAP/CHAP用户名”输入你宽带的用户名&…

pandorabox 潘多拉固件路由器作为无线打印机服务器记录

为了省下无线打印机服务器的一两百元&#xff0c;我开始了路由器的折腾之旅 首先我想到了最熟悉老毛子固件&#xff0c;老毛子固件里确实有打印机选项&#xff0c;而且提供了下载print.exe的网址&#xff0c;我兴高采烈的下载下来&#xff0c;试用之后却发现极其不稳定&#xf…

async和await的作用

词法定义 async async 是“异步”的简写&#xff0c; async 用于申明一个异步的 function await await 可以认为是 async wait 的简写&#xff0c;await 用于等待一个异步方法执行完成。 特点&#xff1a; asayc的用法&#xff0c;它作为一个关键字放到函数前面&#xff0c…

Vue中async和await的使用

在使用vue中如果返回的值是一个Promise对象&#xff0c;那我们就可以用async和await简化这段代码 async是作为一个关键词放在函数的最前面&#xff0c;而await是放在async函数里面的&#xff0c;async表示这个函数是异步的&#xff0c;await是等待的意思&#xff0c;它的后面我…

async与await

1.基本概念:async await号称异步的终极解决方案&#xff0c;async await之后再无回调. 2.基本使用: async用于修饰一个函数, 表示一个函数是异步的. 如果async函数内没有await, 那么async没有意义的, 全是同步的内容. 只有遇到了await开始往下, 才是异步的开始. 我们用代码…

async/await 用法

目录 1、 async 函数1.1、例子&#xff1a;async函数不写返回值1.2、例子&#xff1a;async函数写了返回值&#xff0c;返回值为一般数据1.3、例子&#xff1a;async函数写了返回值&#xff0c;返回值为一个promise对象 2、await 函数2.1、例子&#xff1a;await 右侧表达式是p…

c# async/await的用法

转于&#xff1a;https://www.cnblogs.com/liqingwen/p/5831951.html 关键&#xff1a; 异步方法&#xff1a;在执行完成前立即返回调用方法&#xff0c;在调用方法继续执行的过程中完成任务。 async/await 结构可分成三部分&#xff1a; &#xff08;1&#xff09;调用方法&a…

async/await详解

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;专注于前端领域各种技术&#xff0c;热衷分享&#xff0c;期待你的关注。 &#x1f4ab;系列专栏&#xff1a;vue3从入门到精通 &#x1f4dd;个人签名&#xff1a;不破不立 &#x1f36c…

C# 中的Async 和 Await 的用法详解

1 众所周知C#提供Async和Await关键字来实现异步编程。在本文中&#xff0c;我们将共同探讨并介绍什么是Async 和 Await&#xff0c;以及如何在C#中使用Async 和 Await。 写在前面 自从C# 5.0时代引入async和await关键字后&#xff0c;异步编程就变得流行起来。尤其在现在的.NET…