MyCat中常见的几种分片策略

news/2025/3/25 2:16:26/文章来源:https://www.cnblogs.com/huajieyu/p/18787826

MyCat的常见几种分片策略:范围分片,取模分片,Hash分片,枚举分配,子串分片,固定Hash分片,字符串Hash分片,日期分片,自然月分片。当然不仅于此,具体参考MyCat文档。

1. 范围分片

这是MyCat里面配置文件的默认分片方式,tableRule的name是auto-sharding-long,具体使用到的类是io.mycat.route.function.AutoPartitionByLong,通过在rule.xml中可以查询到配置文件的名称,默认是autopartition-long.txt,打开mycat的conf文件夹,可以看到有这个文件。文件内容如下

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

很简单,就是需要配置3台服务器组成集群,其中id为0到5000000的数据放标识为0的服务器上,id为5000000到10000000的数据放标识为1的服务器上,id为10000000到15000000的数据放标识为2的服务器上。

这里面的配置可以修改,范围分片适用于id是数值类型的情况。

范围分片的优点是配置简单,逻辑简单,缺点就是很可能插入了一两百万条数据,结果全在一台服务器上,其他两台服务器是空着的,旱的旱死,涝的涝死。


2. 取模分片

tableRule的name是mod-long,用到了类是io.mycat.route.function.PartitionByMod, 需要配置为name为count的property参数,代表服务器数量。比如3,代表有3台服务器组成集群参与分片,id % 3得到的值是0,1,2,所以就会被分别分片到服务器1,服务器2,服务器3上。

取模分片的优点是分片比较均匀,不会像范围分片那样数据比较集中。


3. Hash分片

tableRule的name是sharding-by-murmur, 用到的类是io.mycat.route.function.PartitionByMurmurHash,需要配置为name为count的property参数,代表服务器数量。分片是通过计算数据id的Hash值,然后对服务器数量取模,分配到对应的服务器上,不要求分片字段是数值型。相同哈希因子计算值总是分配到同一分区,不会因为分区节点增加而改变分区位置。


4. 枚举分片

tableRule在rule.xml中没有配置,但是可以自定义name,使用到的类是io.mycat.route.function.PartitionByFileMap,还需要参考配置文件partition-hash-int.txt,里面记录了枚举的内容,默认如下:

10000=0
10010=1

当数据枚举字段为10000的时候分配到分片1上,10010时分配到分片2上,可以进行修改和增加,比如

0=0
1=1
2=2

5. 子串分片

rule.xml中没有直接记录name,可以自定义,使用到的类是io.mycat.route.function.PartitionDirectBySubString,实现原理是针对某一个字符串进行截取,得到的子字符串必须为数值类型,然后通过子字符串进行分片。需要指定02以及30,startIndex代表开始截取的字符串位置,size代表需要截取的长度,partitionCount代表分片数量,defaultPartition表示没有找到对应分片的时候默认存放到指定位置的分片。


6. 固定Hash分片

rule.xml中没有直接记录name,可以自定义,使用到的类是io.mycat.route.function.PartitionByLong,对分片字段进行与1023的二进制(也就是1111111111)进行"&"运算,得到的值必然在0-1023之间,然后分配到指定分片。需要配置的是2,1256,512,满足2×256 + 1×512 = 1024这种格式,这里代表的是0-255分配到第一分片,256-511分配到第二分片,512-1023分配到第三分片,满足n1×range1 + n2×range2 + ... + nN×rangeN = 1024即可。需要注意的是partitionCount和partitionLength的数量必须一一对应。


7. 字符串Hash分片

配置文件中还没有记录,可以自定义,使用的类是io.mycat.route.function.PartitionByString, 通过获取字符串的二进制值,与1023进行"&"运算然后分配到指定分片,和固定Hash分片原理相似。


8. 日期分片

配置文件中还没有记录,可以自定义,使用的类是io.mycat.route.function.PartitionByDate,需要配置的是yyyy-MM-dd2022-01-012022-01-2010,其中dateFormat指的是日期格式,sBeginDate是开始时间,sEndDate是结束时间,sPartionDay指的是按n天进行分片。比较需要注意的是,【(结束时间-开始时间)/分片天数】的计算结果是分片数,实际的分片数必须要有足够的分片才行,也就是说01.01-01.10分到第一分片,01.11-01.20分到第二分片,如果此时结束时间不是01.20,而是01.30,那就没有足够的分片来存放01.21-01.30的数据。如果满足分片要求,sEndDate之后的时间会循环分配,也就是说01.21-01.30的分到第一分片,01.31-02.09的分到第二分片,02.10-02.19的又分配到第一分片,如此下去。


9. 自然月分片

tableRule的name是sharding-by-month,使用的类是io.mycat.route.function.PartitionByMonth,原理和日期分片相似,但是自然月分片的话不是按固定30或者31天来分,而是1月分一块,2月分一块这样子。同样的,【结束时间-开始时间】得到的月份数就是分片数量,分片服务器不能小于这个数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904199.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!

前言 今天大姚给大家分享一款基于 .NET 开源(GPL-2.0 license)、免费、功能强大的 Windows 远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议:mRemoteNG。 项目介绍 mRemoteNG是一款基于 .NET 开源(GPL-2.0 license)、免费、功能强大的 Windows 远程连接管理工具,支…

探秘Transformer系列之(17)--- RoPE

从零开始解析Transformer,目标是:(1) 解析Transformer如何运作,以及为何如此运作,让新同学可以入门;(2) 力争融入一些比较新的或者有特色的论文或者理念,让老鸟也可以有所收获。探秘Transformer系列之(17)--- RoPE 目录探秘Transformer系列之(17)--- RoPE文章总表0x0…

《AI未来进行式》(DeepSeek、宇树科技、人形机器人、AI面试官本书全部预言。第18届文津提名奖,樊登、俞敏洪、刘慈欣等推荐) | PDF免费下载

《AI未来进行式》深入探讨人工智能的最新进展与未来趋势,涵盖 DeepSeek、宇树科技、人形机器人、AI 面试官等前沿话题。通过翔实案例与专业分析,预测 AI 如何重塑社会、产业与人类生活。荣获第18届文津图书奖提名,获樊登、俞敏洪、刘慈欣等推荐,适合对 AI 未来充满好奇的读…

python第三章课后程序练习题

重量计算 earth_weight = eval(input("请输入你当前的体重(kg)😊) moon_weight = earth_weight * 0.165 for year in range(1, 11): earth_weight += 0.5 moon_weight = earth_weight * 0.165 print(f"Year {year}: Earth weight = {earth_weight}kg, Moon weight …

逆序对的数量 与 归并排序

题目描述 给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足i<j且 a[i]>a[j],则其为一个逆序对;否则不是。 输入格式 第一行包含整数 n,表示数列的长度。 第二行包含 n 个整数,表示整个数列…

我最常用的 Visual Studio 2022 扩展插件推荐:生产力必备工具

Visual Studio 2022作为微软推出的一款功能强大的IDE,业界称之为“宇宙第一IDE”。它以出色的性能、丰富的内置功能和对多种编程语言的支持,深受开发者喜爱。然而,随着项目复杂度的增加和开发需求的多样化,仅依靠IDE的内置功能往往不足以满足所有场景。这时,扩展插件成为了…

25年可以免费使用的云服务器

免费服务器:调试程序与建站的好帮手网站链接为:https://www.sanfengyun.com/ 在数字化时代,无论是个人开发者、大学生还是时间充裕的技术爱好者,拥有一台稳定的服务器来调试程序和搭建网站都是至关重要的。而正是这样一个为广大用户提供了极大便利的平台,它以其免费的云服…

Code Runner MCP Server,来了!

大家好!我是韩老师。如果作为程序员的你,还不了解 MCP (Model Context Protocol) 的话,那韩老师劝你赶紧去补补课吧!本文不对 MCP 进行详细介绍~ 简单来说,MCP is another LSP in AI World! 也许有一天,AI 程序员不懂 MCP,就犹如前端程序员不懂 JavaScript!大家都知道韩…

Ollama初识

初识ollama,学习基本功能和记录参数前言 最近由于 deepseek 的火爆,AI 大语言模型又一次被抬了出来,对此早有关注的我决定尝试本地化部署使用体验一下,并且搭建一个本地的 AI 助手。 根据我之前了解到的信息,在使用大模型,现在较为方便的方法一般是先搭建一个大模型的管理…

Pass-15

function isImage($filename){//需要开启php_exif模块$image_type = exif_imagetype($filename);switch ($image_type) {case IMAGETYPE_GIF:return "gif";break;case IMAGETYPE_JPEG:return "jpg";break;case IMAGETYPE_PNG:return "png";break…

Pass-16

$is_upload = false; $msg = null; if (isset($_POST[submit])){// 获得上传文件的基本信息,文件名,类型,大小,临时文件路径$filename = $_FILES[upload_file][name];$filetype = $_FILES[upload_file][type];$tmpname = $_FILES[upload_file][tmp_name];$target_path=UPLO…