mysql 热块_MySQL分布式集群之MyCAT(三)rule的分析【转】

首先写在最前面,MyCAT1.4的alpha版本已经发布了,这里面修复了不少的bug,也完善了一细节,之前两篇博客已经做了一些修改

---------------------------------------------------------------------------------这才是本体~----------------------------------------------------------------------------------

之前已经介绍过了schema的作用了,这一篇会把rule和server一起介绍~

首先是rule,在这个文件里面会详细的制定多种分片的规则,这次只抽出一些使用率比较高的方法,先上配置文件的内容

29510932_1432984475w15j.png

可以简单看一下,在截图的上半部分描述的是rule的定义,在下半部分,是rule对应的实际切分规则,这里总工介绍下面四种切分方式~murmur已坑~

-------------------------------------------------------------------------------------------Hash-int---------------------------------------------------------------------------------

先看hash-int,在这一条切分规则的下面,有一个mapfile,这代表着,这个切分规则是根据partition-hash-int的内容来决定的,那么看一下这个文本文件

29510932_1432985106a7sl.png

很简单的内容,这代表着切分使用的基准列里面,值为10000的时候,放在第一个DN里面(dn1),值为10010的时候,放在第二个DN里面(dn2)

可以看一下实际效果

29510932_14329854949VNc.png

29510932_14329855628BTB.png

看一下MyCAT的Debug日志,这两条语句被分配到了dn1和dn2上面,数据库里面也插入了相对应的数据

29510932_1432985742JUub.png

那么~问题来了(挖掘机滚粗~),如果插入的数据中,基准列的取值不是这个文件里面写明的值,会是什么效果?

29510932_1432985865G6bG.png

直截了当的报错了~

好了,hash-int的这种切分规则,大体上可以理解为枚举分区,会比较适合于取值固定的场合,比如说性别(0,1),省份(固定值,短时间不会收复日本省吧~),渠道商 or 各种平台的ID

而且,用逗号分隔可以把多个值放在一个分区里面,所以可以根据实际的数据量/流量/访问量来综合制定切分策略;

缺点:毕竟不是全能战士╮(╯_╰)╭

-------------------------------------------------------------------------------------------range-long---------------------------------------------------------------------------------

第二种切分方式,range-long,仔细一看的话,和hash-int是比较像的,也是由特定的文件来决定切分策略,所以还是去看一下文件的内容

29510932_14329863945VMb.png

从文件内容可以看出,这是一种范围切分的方式,制定基准列的取值范围,然后把这一范围的所有数据都放到一个DN上面,这种方式和hash-int基本一致,就不截图了(懒癌晚期,时间不够了!)

这种切分策略,个人感觉在业务数据库里面的使用场景会少一些,因为这种切分方式需要预定好整体的数量,这就决定了那种无限增长的数据不能用这个,毕竟要改动这个切分策略会很麻烦

真要用起来,感觉也就对自增主键用,然后按照一定的数量来均匀切分,比如那种一天固定X条数据的业务(温度采集?数据采集?之类的情况),然后提前建好多个DN(库)。

当然,也存在一种潜在的问题,如果在短时间发生海量的顺序插入操作,而每一个DN(分库)设定的数量比较高(比如说一个DN设定的放1000W条数据),那么在这个时候,会出现某一个DN(分库)IO压力非常高,而其他几个DN(分库)完全没有IO操作,就会出现类似于DB中常见的热块/热盘的现象,而MySQL经常用自增主键,所以使得MySQL的表出现大量“顺序”插入的机会会多很多。

--------------------------------------------------------------------------------------------mod-long-----------------------------------------------------------------------------------

mod-long,从mod来看这应该是一种取余数的方法,来看一下具体配置的信息

29510932_1432987067mOiC.png

count=4,这是代表着总共把数据切分成四份,一般是和具体的DN数量对应,从而达到把数据均匀的分布在四个DN上(当然,count

看一下实际的效果

29510932_1432987521qFUz.png

看一下MyCAT的Debug日志,看看MyCAT是如何处理的

29510932_14329876323Fee.png

采用这种取余数的方式时,这四条数据分别插入了四个DN(库),而且可以看到,顺序插入时,数据是被均匀的分散在多个DN(库)上面

相比较于上面的range的方法,这种切分策略会更好的分散数据库写的压力,但是问题也很明显,一旦出现了范围查询,就需要MyCAT去合并结果,当数据量偏高的时候,这种跨库查询+合并结果消耗的时间有可能会增加很多,尤其是还出现了order by的时候。

所以这种切分策略会比较适合于单点查询的情景,比如说.....我也不知道......真的不知道,也许在银行,查询个人账户信息的时候,一些和用户信息的表可以做好冗余,然后利用这种方式来提供更为高效的查询(毕竟银行的用户数量多,恩恩~)

--------------------------------------------------------------------------------partition-by-long----------------------------------------------------------------------------------

partition-by-long,处于range-long和mod-long之间的一个略微折中的划分策略,具体切分形势依照如下描述:

以1024为一个单位,每个DN存放partitionLength数量的数据,且,partitionCount x partitionLength=1024

看起来有点难以理解,形象点描述的话,以partitionCount(4) x partitionLength(256)为例,sid%1024=0-255的放在DN1,256-511的放在DN2,以此类推

试着以128为偏移值插入了八条数据,直接看MyCAT的日志

29510932_1432989694hvEO.png

可以看到,八条数据均匀的分布在这四个DN里面~

值得一提的是,这种切分策略也支持非均匀分布~实在是测不动了,盗图两张~

29510932_1432989783kEdV.png

29510932_1432989833uzUU.png

这两张图基本上也说明白了这种非均匀分布的划分策略,重点还是在2x256+1x512=1024上面~

这种划分策略在range-long和mod-long之间取了一个折中点,同时,也还算是比较灵活,可以根据不同的情况进行非均匀划分,实际上能应用的场景会稍微多一点吧,或者说,不少场景都能用一用,相对减少了跨DN的情形,又把数据比较均匀的切分开来了,单点查询也不会太慢。

-----------------------------------------------------------------------------------写在最后-------------------------------------------------------------------------------------

其实MyCAT支持的切分方式还有不少,比如说按照时间的切分策略,可以按月,按天切分等,在这里也没办法把所有的策略都放上来,见谅了o( ̄ヘ ̄o#)

实际上从个人的观点来看,时间的切分依照数据库本身的分区策略来分也没什么问题,半年度,季度的数据也还是会需要查询的....PS:   _(:з」∠)_真不是懒...

可以说,MyCAT的分库分表的重点,基本全部在这个rule里面体现了,表要不要分,表的数据怎么切分,都是需要根据实际业务来决定,充分根据业务的特点去决定最合适的划分策略~

下一章预告>>server,对MyCAT调优的主要部分

第一篇http://blog.itpub.net/29510932/viewspace-1664499/

第二篇http://blog.itpub.net/29510932/viewspace-1667814/

转自

MySQL分布式集群之MyCAT(三)rule的分析-wangwenan6-ITPUB博客

http://blog.itpub.net/29510932/viewspace-1678591/

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

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

相关文章

工业交换机的四种安装方式图解

工业交换机的作用可以说是非常强大的,其应用十分广泛,在电力、轨道交通、市政、煤矿安全、工厂自动化、水处理系统、城市安防等都有它的身影,为现代生活智能化的发展提供了非常大的助力。但是由于使用环境的原因,在安装工业交换机…

rpm mysql 更改目录_rpm形式安装的MySQL服务 并 修改数据文件目录( red hat)_mysql...

rpm方式安装的mysql服务 并 修改数据文件目录( red hat)卸载mysql1、查找以前是否装有mysql命令:rpm -qa|grep -i mysql可以看到mysql的两个包:mysql-*..*.RHEL**mysqlclient*.RHEL**2、删除mysql删除命令:rpm -e --nodeps 包名( rpm -ev mys…

python参数化建模 书_Python 中如何实现参数化测试?

之前,我曾转过一个单元测试框架系列的文章,里面介绍了 unittest、nose/nose2 与 pytest 这三个最受人欢迎的 Python 测试框架。本文想针对测试中一种很常见的测试场景,即参数化测试,继续聊聊关于测试的话题,并尝试将这…

反模式设计_设计模式:模式或反模式,这就是问题

反模式设计我最近遇到了Wiki页面“ Anti-pattern” ,其中包含详尽的反模式列表。 其中一些对我来说很明显。 他们中的一些让我想了一下,其他的让我想了更多。 然后,我开始在页面上查找反模式“ singleton”,但找不到。 &#xff0…

js中的数据类型分为两大类分别是什么_数据类型有这么重要吗?

一个没有得到重视的知识点, 数据类型 每种语言都有自己的数据类型,下面以javascript为例 类型的分类 js的数据类型可以分为 两大类: 1,值类型 (String,Number,undefined,Boolean,null) 2,引入类型(Object,Function,Array) 个人理解也可以把值类型和引入类型分为简单类型和复杂类…

监控系统几种常见的光端机传输方案拓扑图

近几年随着模拟摄像机被网络摄像机以及高清同轴摄像机取代,在光纤传输层,之前使用量比较大的视频光端机也逐渐被光纤收发器、POE交换机、网络交换机等网络光通信设备取代掉。目前市场上音频、数据、开关量、电话、对讲等信号依然可以通过光端机来进行传输…

在等待Jakarta EE时

自甲骨文在JavaOne 2017宣布将Java™EE转移到Eclipse Foundation以来已有一年多了。此后发生了很多事情: Java™EE 8 API和实现项目已在EE4J下建立 。 Eclipse GlassFish 5.1 版本即将发布 。 全新的Jakarta EE规范流程指日可待。 社区显示出有关Jakarta EE技术…

工业交换机外壳选用时有什么要求?

我们一般在选择工业交换机时,更多的是关注工业交换机的温度范围、EMC电磁兼容性、安装方式和电源等,而对于工业交换机的外壳关注比较少,除了一些客户需要防水要求的。接下来就由飞畅科技的小编来为大家介绍一下工业交换机外壳选用有什么要求?…

工业交换机与光纤收发器的区别

工业交换机与光纤收发器效果有什么差异工业交换机与光纤收发器不同的是,光纤收发器其实是点对点的工业工业交换机,光纤收发器只是一种光电转化设备,仅仅只是用于因传输间隔过远而采取的一种延长传输间隔的一种手法;而工业交换机是…

使用React Native和Spring Boot构建一个移动应用

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证。 React Native是使用React构建移动应用程序的框架。 React允许您使用声明式编程风格来…

交换机的特点及工作原理

交换机有多个端口,每个端口都具有桥接功能,可以连接一个局域网或一台高性能服务器或工作站,实际上,交换机有时被称为多端口网桥。那么,对于交换机的特点以及工作原理这块你是否有了解呢?接下来我们就来为大…

Spark UI的见解

作为延续解剖的-Apache的火花的工作后,我将分享如何利用星火UI调谐工作。 我将继续使用先前文章中使用的相同示例,新的spark应用程序将在以下方面完成工作 –阅读纽约市停车票 –通过“板ID”进行汇总并计算违规日期 –保存结果 此代码的DAG看起来像…

光纤收发器的6个指示灯说明

我们常用的光纤收发器都有6个指示灯,那么每个指示灯都代表什么含义呢?是否所有指示灯都亮起才代表光纤收发器正常工作呢?接下来飞畅科技的小编就来为大家详细说明一下,一起来看看吧! 光纤收发器的指示灯说明&#xff…

如何通过光纤收发器指示灯来判断收发器的故障

我们常用的光纤收发器都有6个LED指示灯,它们显示了收发器的工作状态,根据LED所示,就能判断出收发器是否工作正常和可能有什么问题,从而能帮助找出故障。那么,光纤收发器的每个指示灯都有什么含义呢?是否所有…

单纤光纤收发器a与b怎么放?如何使用光纤收发器的AB端?

光纤收发器的ab端是发射端(a端)和接收端(b端),单纤收发器两端分别是A端与B端,这两端的波长不同,发射端的波长比接收端的波长短,而双纤收发器其实是不分AB端的,因为它两端…

您的API是什么情况?

免责声明:在纯REST中,API是不透明的,URL应该是在对先前请求的响应中作为链接发送的内容。 但是,我不是在讲纯REST,而是在讲更实用的API,其中涉及REST的一些概念以及通用的API最佳实践。 编写API时&#xf…

家用光纤猫设备、光纤收发器和光电交换机介绍

光纤能转换网线吗?光纤是一种光导玻璃纤维,传输的是光信号,是不能直接与网线连接,需要通过光电转换设备,将光信号转换成网络信号,常见的光电转换设备有家用光纤猫设备、光纤收发器和光电交换机。接下来就由…

浅谈模拟光端机和数字光端机的区别?

光纤和光端机应用在监控领域里主要是为了解决两个问题:一是传输距离,一是环境干扰。双绞线和同轴电缆只能解决短距离、小范围内的监控图象传输问题,如果需要传输数公里甚至上百公里距离的图象信号则需要采用光纤传输方式。光端机为监控系统提…

Java io字符流读入英文_Java IO 系列教程(四)-字符输入流(2)

本文介绍字符输入流在前面一节中,我们向一个文件中写入了一些字符,通过图片可以看出总共是6个中文字符和一个换行,总共是20个字节,可以推算出字符编码是utf-8,每个汉子占3三个字节。本文就用字符输入流来读一下。代码部…

AWS上的应用程序自动扩展–选项及其对性能的影响

扩展软件应用程序是至关重要的,以避免由于网站的客户群或需要处理大量数据集的应用程序等增加而导致工作负载增加的性能瓶颈。云服务提供商通常是访问其他应用程序的最佳方法随需应变的资源,可根据应用程序的负载变化来扩大或缩小。 1.什么是可伸缩性&a…