品优购电商系统部署 Day2 六

1.3.5 MyCat 分片规则
rule.xml 用于定义分片规则 ,我们这里讲解两种最常见的分片规则
1)按主键范围分片 rang-long
在配置文件中我们找到

<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>

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

<function name="rang-long"
class="org.opencloudb.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>

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

# 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,因为我要将数据分成

<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>

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

<tableRule name="sharding-by-murmur">
<rule>
<columns>id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>

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

<tableRule name="sharding-by-murmur-order">
<rule>
<columns>order_id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>

在 schema.xml 中配置逻辑表时,指定规则为 sharding-by-murmur-order

<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur-order" />

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值