A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】品优购电商系统部署 Day2 六

1.3.5 MyCat 分片规则
rule.xml 用于定义分片规则 ,我们这里讲解两种最常见的分片规则
1)按主键范围分片 rang-long
在配置文件中我们找到
[AppleScript] 纯文本查看 复制代码
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule> 

tableRule 是定义具体某个表或某一类表的分片规则名称 columns 用于定义分片的列algorithm 代表算法名称 我们接着找 rang-long 的定义

[AppleScript] 纯文本查看 复制代码
<function name="rang-long"
class="org.opencloudb.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function> 

Function 用于定义算法 mapFile 用于定义算法需要的数据,我们打开 autopartition-long.txt

[AppleScript] 纯文本查看 复制代码
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2 

2)一致性哈希 murmur
当我们需要将数据平均分在几个分区中,需要使用一致性 hash 规则
我们找到 function name murmur 的定义,将 count 属性改为 3,因为我要将数据分成3

[AppleScript] 纯文本查看 复制代码
<function name="murmur"
class="org.opencloudb.route.function.PartitionByMurmurHash">
<property name="seed">0</property><!-- 默认是 0 -->
<property name="count">3</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片
-->
<property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么
多虚拟节点,默认是 160 倍,也就是虚拟节点数是物理节点数的 160 倍 -->
<!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节
点默认是 1。以 properties 文件的格式填写,以从 0 开始到 count-1 的整数值也就是节点索引为 key,以节
点权重值为值。所有权重值必须是正整数,否则以 1 代替 -->
<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>
用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点
的 murmur hash 值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东
西 -->
</function> 

我们再配置文件中可以找到表规则定义

[AppleScript] 纯文本查看 复制代码
<tableRule name="sharding-by-murmur">
<rule>
<columns>id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>

但是这个规则指定的列是 id ,如果我们的表主键不是 id ,而是 order_id ,那么我们应该重新定义一个 tableRule

[AppleScript] 纯文本查看 复制代码
<tableRule name="sharding-by-murmur-order">
<rule>
<columns>order_id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>

schema.xml 中配置逻辑表时,指定规则为 sharding-by-murmur-order
[AppleScript] 纯文本查看 复制代码
<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur-order" /> 


我们测试一下,创建品优购的订单表 ,并插入数据,测试分片效果。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马