mycat --分片规则--
文章目录
- MyCat分片规则详解
- 1. rule1 (基于id的func1算法)
- 2. sharding-by-date (按日期分片)
- 3. rule2 (基于user_id的func1算法)
- 4. sharding-by-intfile (基于枚举值分片)
- 5. auto-sharding-long (长整型范围分片)
- 6. mod-long (取模分片)
- 7. sharding-by-murmur (MurmurHash分片)
- 8. crc32slot (CRC32分片)
- 9. sharding-by-month (按月分片)
- 10. latest-month-calldate (最近月份分片)
- 11. auto-sharding-rang-mod (范围+取模分片)
- 12. jch (Jump Consistent Hash分片)
- 总结对比表
MyCat分片规则详解
下面我将详细解释您列出的这些MyCat分片规则的工作原理和适用场景:
1. rule1 (基于id的func1算法)
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
- 规则:使用自定义函数func1对id列进行分片
- 特点:需要查看func1的具体实现才能确定分片逻辑
- 适用场景:需要特殊分片逻辑的业务场景
2. sharding-by-date (按日期分片)
<tableRule name="sharding-by-date">
<rule>
<columns>createTime</columns>
<algorithm>partbyday</algorithm>
</rule>
</tableRule>
- 规则:按createTime字段的日期(天)进行分片
- 特点:
- 每天的数据存储在同一分片
- 便于按时间范围查询
- 适用场景:日志、订单等时间序列数据
3. rule2 (基于user_id的func1算法)
<tableRule name="rule2">
<rule>
<columns>user_id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
- 规则:使用与rule1相同的func1算法,但针对user_id列
- 特点:同一用户的数据会分配到固定分片
- 适用场景:需要按用户ID分片的业务
4. sharding-by-intfile (基于枚举值分片)
<tableRule name="sharding-by-intfile">
<rule>
<columns>sharding_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
- 规则:根据sharding_id的枚举值映射到不同分片
- 特点:
- 需要配置分片映射文件
- 分片规则明确且固定
- 适用场景:数据有明确分类的场景,如按地区、业务线分片
5. auto-sharding-long (长整型范围分片)
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
- 规则:按照id的数值范围进行分片
- 特点:
- 需要预先定义范围规则
- 范围查询效率高
- 适用场景:ID是连续增长的数字,如自增主键
6. mod-long (取模分片)
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
- 规则:对id值进行取模运算,根据结果分配到不同分片
- 特点:
- 数据分布均匀
- 扩容时需要数据迁移
- 适用场景:需要均匀分布数据的场景
7. sharding-by-murmur (MurmurHash分片)
<tableRule name="sharding-by-murmur">
<rule>
<columns>id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>
- 规则:使用MurmurHash算法对id进行哈希分片
- 特点:
- 哈希分布均匀
- 比传统哈希算法性能更好
- 适用场景:需要均匀分布且高效的哈希分片
8. crc32slot (CRC32分片)
<tableRule name="crc32slot">
<rule>
<columns>id</columns>
<algorithm>crc32slot</algorithm>
</rule>
</tableRule>
- 规则:使用CRC32算法对id进行哈希分片
- 特点:
- 计算速度快
- 分布相对均匀
- 适用场景:需要快速哈希计算的场景
9. sharding-by-month (按月分片)
<tableRule name="sharding-by-month">
<rule>
<columns>create_time</columns>
<algorithm>partbymonth</algorithm>
</rule>
</tableRule>
- 规则:按create_time字段的月份进行分片
- 特点:
- 每月数据存储在同一分片
- 便于按月归档
- 适用场景:需要按月统计或归档的数据
10. latest-month-calldate (最近月份分片)
<tableRule name="latest-month-calldate">
<rule>
<columns>calldate</columns>
<algorithm>latestMonth</algorithm>
</rule>
</tableRule>
- 规则:最近一个月的数据单独分片,历史数据按其他规则分片
- 特点:
- 热点数据单独处理
- 冷热数据分离
- 适用场景:需要特别处理最近数据的业务,如通话记录
11. auto-sharding-rang-mod (范围+取模分片)
<tableRule name="auto-sharding-rang-mod">
<rule>
<columns>id</columns>
<algorithm>rang-mod</algorithm>
</rule>
</tableRule>
- 规则:先按范围分片,范围内再按取模分片
- 特点:
- 结合范围和哈希优点
- 便于扩容
- 适用场景:大数据量且需要灵活扩容的场景
12. jch (Jump Consistent Hash分片)
<tableRule name="jch">
<rule>
<columns>id</columns>
<algorithm>jump-consistent-hash</algorithm>
</rule>
</tableRule>
- 规则:使用Jump Consistent Hash算法进行分片
- 特点:
- 扩容时数据迁移量少
- 不需要维护哈希环
- 适用场景:需要频繁扩容缩容的场景
总结对比表
分片规则 | 算法类型 | 特点 | 适用场景 |
---|---|---|---|
rule1 | 自定义 | 灵活 | 特殊业务需求 |
sharding-by-date | 日期 | 按天分片 | 时间序列数据 |
rule2 | 自定义 | 按用户分片 | 用户数据隔离 |
sharding-by-intfile | 枚举 | 固定映射 | 分类明确数据 |
auto-sharding-long | 范围 | 范围查询高效 | 连续ID |
mod-long | 取模 | 均匀分布 | 均匀分布需求 |
sharding-by-murmur | 哈希 | 高性能哈希 | 高效哈希需求 |
crc32slot | 哈希 | 快速计算 | 快速哈希需求 |
sharding-by-month | 日期 | 按月分片 | 月度统计 |
latest-month-calldate | 冷热 | 热点分离 | 近期数据处理 |
auto-sharding-rang-mod | 混合 | 范围+哈希 | 大数据量灵活扩容 |
jch | 一致性哈希 | 扩容友好 | 频繁扩容场景 |