当前位置: 首页 > news >正文

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一致性哈希扩容友好频繁扩容场景
http://www.dtcms.com/a/107831.html

相关文章:

  • [Android] 共生地球 v1.1.19 国产卫星地图
  • 详细介绍一下C++中的extern关键字
  • 搭建qemu环境
  • 【pcdet3D检测】——OPenpcdet如何进行测试文件配置?能否自定义测试数据?一文看懂pointpillar(pcdet)中的test.py
  • redis7.0搭建redis-cluster集群部署实战
  • AquaMoon and Chess_CodeForces - 1545B
  • AI前沿:资本狂潮下的技术暗战:巨头博弈、开源革命与生态重构
  • Java项目之基于ssm的简易版营业厅宽带系统(源码+文档)
  • Ubuntu 使用apt安装MySQL后的升级方法
  • Share02-小小脚本大大能量
  • 【面试篇】多线程
  • RTX5080 安装torch,torchvision ,torchaudio 指南
  • 全功能在线WEB工具箱PHP源码
  • 3. 线程间共享数据
  • 跨网文件安全交换系统|国产信创认证+安全高效传输
  • 2025-4-2 蓝桥杯刷题情况(分布式队列)
  • 智能觉醒:四大AI Agent框架重构未来生产力
  • 简单描述一下Unity物理系统的主要性能消耗点
  • 【高项】信息系统项目管理师(十五)高级项目管理【4分】
  • RocketMq 5.0之后延时消息底层是怎么实现的?
  • C++(匿名函数+继承+多态)
  • MySQL GROUP BY 和 HAVING 子句中 ‘Unknown column‘ 错误的深入解析
  • 详细介绍一下C++的按位运算
  • Tinder上线《The Game Game》
  • mapreduce工作原理
  • 论文阅读10——解开碳排放与碳足迹之间的关系:文献回顾和可持续交通框架
  • TCP四次挥手
  • 《K230 从熟悉到...》颜色识别
  • 归并排序延伸-非递归版本
  • 基于yolo11的BGA图像目标检测