当前位置: 首页 > news >正文

Mycat(10):分片详解之固定分片hash算法

1 找到conf/schema.xml并备份

 

2 固定分片hash算法

本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取id的二进制低10位,即id二进制 。 此算法的优点在于如果按照 10进制取模运算,在连续插入1-10 时候1-10会被分到1-10个分片,增 大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。

        <tableRule name="xp-sharding-hash">
                <rule>
                        <columns>id</columns>
                        <algorithm>xp-mo-rule-hash</algorithm>
                </rule>
        </tableRule>

        配置说明: 上面columns 标识将要分片的表字段,algorithm 分片函数, partitionCount 分片个数列表,partitionLength 分片范围列表 分区长度:默认为最大2^n=1024 ,即最大支持1024分区 约束 : count,length两个数组的长度必须是一致的。 1024 = sum((count[i]*length[i])). count 和length两个向量的点积恒等于1024 

        用法例子: 本例的分区策略:希望将数据水平分成3 份,前两份各占25%,第三份占50%。(故本例非均匀分区)

// |<———————1024———————————>| 

// |<—-256—>|<—-256—>|<———-512————->| 

| partition0 | partition1 | partition2 |

// | 共2份,故count[0]=2 | 共1份,故count[1]=1 | int[] count = new int[] { 2, 1 }; int[] length = new int[] { 256, 512 }; 

        <function name="xp-mo-rule-hash"
                class="io.mycat.route.function.PartitionByLong">
                <property name="partitionCount">2,1</property>
                <property name="partitionLength">256,512</property>
        </function>

partitionCount分别的数量级

partitionLength 分别数量级的长度

以上的配置是2*256+1*512=1024 那么1024就是分区的模  必须有(2+1)个datanode节点

配置完,重启mycat

3 测试

将sys_test2 表设计出来,然后把它的分片规则修改为区间内轮询的概念

CREATE TABLE sys_test2(

  id INT PRIMARY KEY ,

  testname VARCHAR(20) NOT NULL

);

插入测试—第一圈

1-255 dn1

256-511 dn2

512-1023 dn3

插入测试—第二圈

(1024)-(1024+255) dn1

(1024+256)-(1024+511) dn2

(1024+512)-(2047) dn3

4 执行过程如下

EXPLAIN INSERT INTO sys_test2(id,testname) VALUES(1,'博主很帅');

EXPLAIN INSERT INTO sys_test2(id,testname) VALUES(513,'博主非常帅');

 

EXPLAIN INSERT INTO sys_test2(id,testname) VALUES(1011,'博主就是这么帅');

 

EXPLAIN INSERT INTO sys_test2(id,testname) VALUES(1024,'博主就是这么帅');

 

相关文章:

  • 【Vue】Vue项目打包上线流程--20221219
  • 关于使用PIL库对tif图像进行尺寸裁剪所遇到的问题
  • 在英特尔独立显卡上部署YOLOv5 v7.0版实时实例分割模型
  • 什么是闭包,Python闭包(初学者必读)
  • SpringBoot+Actuator+Prometheus+Grafana进行可视化应用监控
  • C/C++ Qt QThread 线程组件应用
  • 关于小程序订单中心页设置的公告
  • 基于Python + Requests 的Web接口自动化测试框架
  • sed命令详解及demo
  • Allegro关闭线段显示不连续效果操作指导
  • 【408篇】C语言笔记-第十五章( 考研必会的查找算法考研真题实战)
  • 【排序】详细聊聊归并排序(含非递归)
  • kafka单条消息过大导致线上OOM,运维连夜跑路了!
  • ValidateCode验证码的使用详解(初学看完都会用)
  • 肝了一周总结的SpringBoot常用注解大全,一目了然!
  • 【Leetcode】101. 对称二叉树
  • Facebook AccountKit 接入的坑点
  • Java方法详解
  • MD5加密原理解析及OC版原理实现
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Theano - 导数
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • Vue.js 移动端适配之 vw 解决方案
  • vue脚手架vue-cli
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 使用 @font-face
  • 仓管云——企业云erp功能有哪些?
  • 国内开源镜像站点
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​【已解决】npm install​卡主不动的情况
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • $.each()与$(selector).each()
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言)二分查找 超详细
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (三十五)大数据实战——Superset可视化平台搭建
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)linux下的时间函数使用
  • .NET 反射 Reflect
  • .NET 命令行参数包含应用程序路径吗?
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET面试题(二)
  • .net中生成excel后调整宽度
  • :=
  • [1]-基于图搜索的路径规划基础
  • [ACM] hdu 1201 18岁生日
  • [Android Pro] Notification的使用
  • [Android]竖直滑动选择器WheelView的实现