- 實現方式:該算法先進行范圍分片,計算出分片組,組內在取模
- 優點:綜合了范圍分片和取模分片的優點,分片組內使用取模可以保證組內的數據分布比較均勻,分片組之間采用范圍分片可以兼顧范圍分片的特點,事先規划好分片的數量,數據擴容時按照分片組擴容,則原有分片組的數據不需要遷移,分片組內還可以避免熱點數據問題。
- 缺點:在數據范圍時固定值(非遞增值)時,存在不方便擴展的情況,例如將 dataNode Group size 從 2 擴展為 4 時,需要進行數據遷移才能完成
-
配置示例:
<tableRule name="auto-sharding-rang-mod">
<rule>
<columns>id</columns>
<algorithm>rang-mod</algorithm>
</rule>
</tableRule>
<function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
<property name="mapFile">partition-range-mod.txt</property>
<property name="defaultNode">0</property>
</function>
-
相關屬性:
- mapFile:切分規則配置文件
- defaultNode:默認節點,小於0表示不設置默認節點,大於等於0表示設置默認節點,如果超出配置的范圍,則使用默認節點
-
partition-range-mod.txt 示例:
#range start-end,dataNode group size
#K=1000,M=10000
0-100K=2
100K1-200K=2
注意:0-100K=2 表示在 0-100K范圍中,有2個dataNode;如果需要進行擴展,則配置新的范圍並增加 dataNode 組的數量來進行擴展,不需要針對歷史數據進行遷移
