Mycat 常用的分片规则

标签:

本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/04/mycat-chang-yong-de.html

分片枚举

通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下:

    <tableRule name="sharding-by-intfile">
<rule>
<columns>id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
</function>

partition-hash-int.txt

10000=0
10010=1

如上,id为10000的存在0节点,id为10010的存在1节点。

范围约定

    <tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>

autopartition-long.txt

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

id在0–500万之间的存在0分片;

id在500万–1000万之间的存在1分片;

id在1000万–1500万之间的存在2分片。

取 模

此规则为对分片字段求摸运

    <tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
   <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">3</property>
</function>

按日期(天)分片

    <tableRule name="sharding-by-date">
       <rule>
           <columns>create_time</columns>
           <algorithm>sharding-by-date</algorithm>
       </rule>
   </tableRule>
   <function name="sharding-by-date" class="io.mycat.route.function.PartitionByDate">
       <property name="dateFormat">yyyy-MM-dd</property>
       <property name="sBeginDate">2014-01-01</property>
       <property name="sEndDate">2014-10-01</property>
       <property name="sPartionDay">10</property>
   </function>

按照create_time,从2014-01-01开始,每10天的数据存在一个分片。

如果配置了 sEndDate 则代表数据达到了这个日期的分片后循环从开始分片存储。

按月分片

    <tableRule name="sharding-by-month">
<rule>
<columns>create_time</columns>
<algorithm>partbymonth</algorithm>
</rule>
</tableRule>
<function name="partbymonth"
class="io.mycat.route.function.PartitionByMonth">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2015-01-01</property>
</function>

每月一个分片。

发表评论