29MyCat - 分片规则(固定分片hash算法)

简介: 29MyCat - 分片规则(固定分片hash算法)

本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取id的二进制低10位,即id二进制&1111111111。

此算法的优点在于如果按照10进制取模运算,在连续插入1-10时候1-10会被分到1-10个分片,增大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。

<tableRule name="rule1">
   <rule>
     <columns>user_id</columns>
     <algorithm>func1</algorithm>
   </rule>
</tableRule>
 <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
   <property name="partitionCount">2,1</property>
   <property name="partitionLength">256,512</property>
 </function>

配置说明:

上面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 };
PartitionUtil pu = new PartitionUtil(count, length);
// 下面代码演示分别以offerId字段或memberId字段根据上述分区策略拆分的分配结果
 int DEFAULT_STR_HEAD_LEN = 8; // cobar默认会配置为此值
 long offerId = 12345;
 String memberId = "qiushuo";
 // 若根据offerId分配,partNo1将等于0,即按照上述分区策略,offerId为12345时将会被分配到partition0中
 int partNo1 = pu.partition(offerId);
 // 若根据memberId分配,partNo2将等于2,即按照上述分区策略,memberId为qiushuo时将会被分到partition2中
 int partNo2 = pu.partition(memberId, 0, DEFAULT_STR_HEAD_LEN);

如果需要平均分配设置:平均分为4分片,partitionCount*partitionLength=1024

<function name="func1" class="org.opencloudb.route.function.PartitionByLong">
   <property name="partitionCount">4</property>
   <property name="partitionLength">256</property>
 </function>

范围约定

此分片适用于,提前规划好分片字段某个范围属于哪个分片。

start <= range <= end.

range start-end ,data node index

K=1000,M=10000.

<tableRule name="auto-sharding-long">
   <rule>
     <columns>user_id</columns>
     <algorithm>rang-long</algorithm>
   </rule>
 </tableRule>
<function name="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">
   <property name="mapFile">autopartition-long.txt</property>
   <property name="defaultNode">0</property>
 </function>

配置说明:

上面columns 标识将要分片的表字段,algorithm 分片函数

rang-long 函数中mapFile代表配置文件路径

defaultNode 超过范围后的默认节点。

所有的节点配置都是从0开始,及0代表节点1,此配置非常简单,即预先制定可能的id范围到某个分片。

0-500M=0

500M-1000M=1

1000M-1500M=2

0-10000000=0

10000001-20000000=1

目录
相关文章
|
1月前
|
算法 Python
关联规则算法及其画图(python
关联规则算法及其画图(python
25 2
|
2月前
|
存储 缓存 负载均衡
一致性 Hash 算法 Hash 环发生偏移怎么解决
一致性 Hash 算法 Hash 环发生偏移怎么解决
91 1
|
1月前
|
算法
关联规则分析(Apriori算法2
关联规则分析(Apriori算法2
35 0
|
3月前
|
算法
关联规则分析(Apriori算法2
关联规则分析(Apriori算法2
31 0
|
2天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
1月前
|
算法 搜索推荐 网络架构
关联规则分析(算法+画图
关联规则分析(算法+画图
23 0
|
3月前
|
算法 编译器 C语言
learn_C_deep_11 (深刻理解整形提升、左移和右移规则、花括号、++和--操作、表达式匹配:贪心算法)
learn_C_deep_11 (深刻理解整形提升、左移和右移规则、花括号、++和--操作、表达式匹配:贪心算法)
|
3月前
|
算法 数据挖掘
关联规则分析(Apriori算法
关联规则分析(Apriori算法
39 0
|
3月前
|
算法 数据可视化 数据处理
Algorithms_算法专项_Hash算法的原理&哈希冲突的解决办法
Algorithms_算法专项_Hash算法的原理&哈希冲突的解决办法
19 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到&quot;hand.txt&quot;文件。